Certificado SSL autofirmado

Código de Python para crear dinámicamente un certificado SSL autofirmado.

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

Originalmente, reuní y escribí este código cuando necesitaba una gran cantidad de servidores generados dinámicamente (un ASG) para registrarse y poder conectarme a ellos desde un servidor de administración central mediante gRPC . Es un protocolo increíble, pero al usar certificados autofirmados, requería que el certificado del servidor coincidiera con el nombre de host.

Entonces, el código a continuación se incorporó en el código del servidor Python gRPC en todos los nodos, cada servidor en el ASG crearía un nuevo certificado SSL autofirmado cada vez que se iniciara el proceso, y cada servidor registraría su presencia y su clave pública en un znode Zookeeper efímero. Esa fue una manera fácil de administrar una gran cantidad de servidores en ese ASG.

¡Esperamos que te sea útil!

import socket
from OpenSSL import crypto, SSL
 
 
 
def create_self_signed_cert(myHostName):
    """Create a self-signed certificate for the host."""
    # create a key pair
    k = crypto.PKey()
    k.generate_key(crypto.TYPE_RSA, 4096)
 
    # create a self-signed cert
    cert = crypto.X509()
    cert.get_subject().C = "US"
    cert.get_subject().ST = "NY"
    cert.get_subject().L = "Armonk"
    cert.get_subject().O = "IBM"
    cert.get_subject().OU = "Watson"
    cert.get_subject().CN = myHostName
    cert.set_serial_number(1000)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(10*365*24*60*60)
    cert.set_issuer(cert.get_subject())
    cert.set_pubkey(k)
    cert.sign(k, 'sha1')
 
    return (crypto.dump_certificate(crypto.FILETYPE_PEM, cert),
            crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
 
 
myHostName = socket.gethostname().split('.')[0]
(certificate, privatekey) = create_self_signed_cert(myHostName)
print(certificate)
print(privatekey)
Comentarios publicados: 0

Tagged with:
encryption ssl