自己署名SSL証明書

自己署名SSL証明書を動的に作成するためのPythonコード。

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

gRPCを使用して中央管理サーバーからサーバーに接続できるように、動的に生成された多数のサーバー(ASG)を登録する必要があるときに、このコードを最初に収集して作成しました。これは素晴らしいプロトコルですが、自己署名証明書を使用する場合、サーバーの証明書がホスト名と一致する必要がありました。

したがって、以下のコードはすべてのノードのPython gRPCサーバーコードに組み込まれ、ASGの各サーバーは、プロセスが開始されるたびに新しい自己署名SSL証明書を作成し、各サーバーはその存在と公開鍵をに登録します。一時的なZookeeperznode。これは、そのASGで多数のサーバーを管理する簡単な方法でした。

お役に立てば幸いです。

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)
投稿コメント 0

Tagged with:
encryption ssl