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
- crypto.load_certificate_request() - aby uzyskać CSR urządzenia obj
- crypto.load_privatekey() - aby uzyskać OBJ klucza prywatnego CA klucz prywatny
- 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