如何使用Python创建自签名SSL证书

2023-03-30 00:00:00 证书 如何使用 签名

在Python中,可以使用OpenSSL库来创建自签名SSL证书。下面是一个简单的代码演示:

from OpenSSL import crypto

# 创建私钥
key = crypto.PKey()
key.generate_key(crypto.TYPE_RSA, 2048)

# 创建证书请求
req = crypto.X509Req()
subject = req.get_subject()
subject.C = "CN"
subject.ST = "Shanghai"
subject.L = "Shanghai"
subject.O = "Pidancode"
subject.OU = "Tech"
subject.CN = "pidancode.com"
req.set_pubkey(key)
req.sign(key, "sha256")

# 创建证书
cert = crypto.X509()
cert.set_version(3)
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60)
cert.set_subject(req.get_subject())
cert.set_issuer(cert.get_subject())
cert.set_pubkey(req.get_pubkey())
cert.sign(key, "sha256")

# 保存证书和私钥到文件
with open("server.crt", "wb") as cert_file:
    cert_file.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))

with open("server.key", "wb") as key_file:
    key_file.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))

上述代码使用OpenSSL库创建了一个RSA类型的2048位私钥,然后创建了一个证书请求,并设置了一些证书信息,如C(国家/地区)、ST(省/州)、L(城市)、O(组织)、OU(单位)和CN(常用名称)。接下来,我们使用私钥对证书请求进行签名,生成了一个自签名的证书。

最后,我们将证书和私钥保存到文件中。在上述代码中,我们使用了字符串“pidancode.com”作为证书的CN(常用名称)。

注意,自签名证书在实际生产环境中并不安全,因为它们没有被任何可信的第三方机构签署,且存在风险被篡改或者中间人攻击。在实际生产环境中,应该使用受信任的证书机构颁发的证书。

相关文章