Certificat SSL auto-signé

Code Python pour créer dynamiquement un certificat SSL auto-signé.

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

À l'origine, j'ai rassemblé et écrit ce code lorsque j'avais besoin qu'un grand nombre de serveurs générés dynamiquement (un ASG) s'enregistrent afin de pouvoir s'y connecter à partir d'un serveur de gestion central à l'aide de gRPC . C'est un protocole génial, mais lors de l'utilisation de certificats auto-signés, il fallait que le certificat du serveur corresponde au nom d'hôte.

Ainsi, le code ci-dessous a été incorporé dans le code du serveur Python gRPC sur tous les nœuds, chaque serveur de l'ASG créerait un nouveau certificat SSL auto-signé à chaque démarrage du processus, et chaque serveur enregistrerait sa présence et sa clé publique dans un znode Zookeeper éphémère. C'était un moyen facile de gérer un grand nombre de serveurs dans cet ASG.

J'espère que vous le trouverez utile !

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)
Commentaires publiés : 0

Tagged with:
encryption ssl