2014-04-16 33 views
7

Jestem nowym użytkownikiem Pythona i wciąż go uczę, więc moje pytanie może być mało naiwne. Należy go opatrzyć;)Zarejestruj CSR od klienta przy użyciu certyfikatu głównego CA w pythonie

Problem polega na tym, że klient wyśle ​​CSR i chcę go podpisać za pomocą certyfikatu głównego CA i zwrócić podpisany certyfikat z powrotem do klienta.

Używam tego polecenia, aby to zrobić za pomocą wiersza poleceń

openssl x509 -req -in device.csr -ca root.pem -CAkey root.key -CAcreateserial wymeldowanie device.crt -days 500

to samo chcę osiągnąć przy użyciu Pythona. Natknąłem się biblioteki Pythona dla openssl pyopenssl

jest to możliwe za pomocą tej biblioteki? W jaki sposób ? lub shoudl I go na M2Crypto?

Odpowiedz

8

Można rzeczywiście iść z pyOpenSSL. Ponieważ mówisz, że masz już certyfikat główny CA i klucz prywatny, a CSR zostanie wysłany przez klienta, możesz użyć funkcji crypto, aby odczytać wszystkie (certyfikat CA, klucz prywatny i CSR urządzenia) z pliku lub zarządzać nimi. je w buforze.

Na początek użyj poniższych funkcji. Sprawdzić dir(crypto) and crypto.function_name.__doc__ na interpreter Pythona o więcej informacji :) Trzeba importować kryptograficznych z pyOpenSSL

  1. crypto.load_certificate_request() - aby uzyskać CSR urządzenia obj
  2. crypto.load_privatekey() - aby uzyskać OBJ klucza prywatnego CA klucz prywatny
  3. crypto.load_certificate() - aby uzyskać certyfikat główny CA

następnie można napisać prosty funcation wrócić certyfikatowi

def create_cert(): 
    cert = crypto.X509() 
    cert.set_serial_number(serial_no) 
    cert.gmtime_adj_notBefore(notBeforeVal) 
    cert.gmtime_adj_notAfter(notAfterVal) 
    cert.set_issuer(caCert.get_subject()) 
    cert.set_subject(deviceCsr.get_subject()) 
    cert.set_pubkey(deviceCsr.get_pubkey()) 
    cert.sign(CAprivatekey, digest) 
    return cert 

gdzie CAcert, deviceCsr i CAprivatekey wartości od powyżej trzech funcations. Teraz, gdy masz już przy sobie certyfikat, możesz zapisać go w pliku, używając crypto.dump_certificate(crypto.FILETYPE_PEM, cert) z wybraną nazwą pliku.

Możesz zmodyfikować tę funkcję zgodnie ze swoimi wymaganiami. Następnie można zweryfikować wygenerowany certyfikat urządzenia przy użyciu certyfikatu głównego CA za pomocą komendy openssl np. openssl verify -CApath <CA cert path> <name of device cert file>

Możesz również przejrzeć kilka przykładów z github. M2Crypto Example, pyOpenSSL example

Nadzieja to daje wyobrażenie o realizacji