python-2.7 openssl ssl-certificate m2crypto pyopenssl

python 2.7 - Firmar CSR desde el cliente utilizando el certificado raíz de CA en python



python-2.7 openssl (1)

Soy nuevo en Python y todavía lo estoy aprendiendo, por lo que mi pregunta puede ser un poco ingenua. Por favor, tengan paciencia;)

El problema es que el cliente enviará CSR y quiero firmarlo con mi certificado raíz de CA y devolver el certificado firmado al cliente.

He estado usando este comando para hacerlo usando la línea de comando

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

Lo mismo que quiero lograr usando Python. Me encontré con la biblioteca de Python para openssl pyopenssl

¿es posible usar esta biblioteca? Cómo ? o shoudl voy por M2Crypto?


De hecho, puede ir con pyOpenSSL. Como dice que ya tiene un certificado raíz de CA y una clave privada, y un cliente le enviará CSR, puede usar las funciones de criptografía para leer todas esas (CA cert, clave privada y CSR del dispositivo) desde un archivo o administrar para tener ellos en buffer.

Use las funciones a continuación para comenzar. Comprueba dir(crypto) and crypto.function_name.__doc__ en python intérprete para obtener más información :) Debes importar crypto desde pyOpenSSL

  1. crypto.load_certificate_request () - para obtener el obj de CSR del dispositivo
  2. crypto.load_privatekey () - para obtener obj de clave privada para clave privada de CA
  3. crypto.load_certificate () - para obtener el certificado raíz de CA

entonces puedes escribir funcation simple para devolver el certificado

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

donde caCert , deviceCsr y CAprivatekey son valores de las tres funcaciones anteriores. Ahora que tiene un certificado con usted, puede escribirlo en un archivo usando crypto.dump_certificate(crypto.FILETYPE_PEM, cert) con el nombre de archivo de su elección.

Puede modificar esta función según su requisito. Después de esto, puede verificar el certificado del dispositivo generado con el certificado raíz de CA con el comando openssl verify -CApath <CA cert path> <name of device cert file> por ejemplo, openssl verify -CApath <CA cert path> <name of device cert file>

También puedes ver algunos ejemplos de github. Ejemplo de M2Crypto , ejemplo pyOpenSSL

Espero que esto te dé una idea sobre la implementación