欢迎访问宙启技术站
智能推送

使用OpenSSL.crypto模块在Python中生成自签名数字证书

发布时间:2023-12-25 07:42:11

在Python的OpenSSL库中,可以使用crypto模块来生成自签名数字证书。下面是一个使用例子,展示了如何生成一个自签名数字证书:

首先,需要导入相关的模块和库:

from OpenSSL import crypto
from datetime import datetime, timedelta

接下来,可以创建一个私钥:

# 生成一个私钥
private_key = crypto.PKey()
private_key.generate_key(crypto.TYPE_RSA, 2048)

然后,可以创建一个自签名的证书申请:

# 创建证书申请对象
req = crypto.X509Req()
req.get_subject().CN = "example.com"
req.set_pubkey(private_key)
req.sign(private_key, "sha256")

接下来,可以创建一个证书:

# 创建一个有效期为365天的证书
start_date = datetime.now()
end_date = start_date + timedelta(days=365)

cert = crypto.X509()
cert.set_version(2)
cert.set_serial_number(3)
cert.set_subject(req.get_subject())
cert.set_pubkey(req.get_pubkey())
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(365*24*60*60)
cert.set_issuer(cert.get_subject())
cert.sign(private_key, "sha256")

最后,可以将私钥和证书保存到文件:

# 将私钥保存到文件
with open("private.key", "wb") as f:
    f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, private_key))

# 将证书保存到文件
with open("certificate.crt", "wb") as f:
    f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))

这样,就生成了一个自签名的数字证书。在文件系统中,可以找到私钥文件private.key和证书文件certificate.crt

需要注意的是,这个例子中生成的是自签名的证书,它不会被信任任何证书颁发机构(CA)。因此,使用这个证书时可能会引发安全警告。如果需要一个被广泛信任的数字证书,可以考虑使用付费或免费的证书颁发机构(CA)来签署证书。