자체 서명된 SSL 인증서

자체 서명된 SSL 인증서를 동적으로 생성하기 위한 Python 코드입니다.

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

나는 원래 gRPC 를 사용하여 중앙 관리 서버에서 연결할 수 있도록 자체 등록을 위해 많은 수의 동적으로 생성된 서버(ASG)가 필요할 때 이 코드를 수집하고 작성했습니다. 그것은 멋진 프로토콜이지만 자체 서명된 인증서를 사용할 때 호스트 이름과 일치하는 서버의 인증서가 필요했습니다.

따라서 아래 코드는 모든 노드의 Python gRPC 서버 코드에 통합되었으며 ASG의 각 서버는 프로세스가 시작될 때마다 새로운 자체 서명된 SSL 인증서를 생성하고 각 서버는 존재와 공개 키를 임시 Zookeeper znode. 이는 해당 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