Python openSSL 从本地 ca.key 创建 X.509 证书签名

问题描述

我必须创建一个本地证书并使用本地 CA.key 对其进行签名。 在我的文件夹中,我有 CA.key、CA.crt、CA.srl,我必须创建自己的 client.crt 和 client.key 文件。 我愿意:

def create_cert():
    with open("ca.key",'r') as f:
        CAprivatekey = crypto.load_privatekey(crypto.FILETYPE_PEM,f.read())

    with open("ca.srl",'r') as f:
        deviceCsr = crypto.load_certificate_request(crypto.FILETYPE_PEM,f.read())

    with open("ca.crt",'r') as f:
        caCert = crypto.load_certificate(crypto.FILETYPE_PEM,f.read())

    cert = crypto.X509()
    cert.get_subject().C = "IT"
    cert.get_subject().ST = "Brescia"
    cert.get_subject().L = "Brescia"
    cert.get_subject().O = "Dummy Company Ltd"
    cert.get_subject().OU = "Dummy Company Ltd"
    cert.get_subject().CN = gethostname()
    cert.set_serial_number(1000)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(10*365*24*60*60)
    cert.set_issuer(caCert.get_subject())
    cert.set_subject(deviceCsr.get_subject())
    cert.set_pubkey(deviceCsr.get_pubkey())
    cert.sign(CAprivatekey,'sha1')

    return cert

但是当我运行我的函数时,我得到:

OpenSSL.crypto.Error: [('PEMroutines','get_name','no start line')]

在实践中,我会在 python 函数中复制这个命令:

openssl genrsa -out client.key 2048
openssl req -new -out client.csr -key client.key -subj "/C=RO/ST=H/L=Home/O=MQTT    Client/OU=MQTT Client/CN=Thing01"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
openssl rsa -in client.key -out client.key

非常感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)