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
- crypto.load_certificate_request () - para obtener el obj de CSR del dispositivo
- crypto.load_privatekey () - para obtener obj de clave privada para clave privada de CA
- 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