使用pyOpenSSL创建CSR和自签名证书

3
使用pyOpenSSL,我想要创建以下内容的密钥对、证书签名请求(csr)和自签名证书:
1. 用于自签名的密钥对 2. 证书签名请求(csr) 3. 自签名证书
当我使用openSSL命令行工具时,我使用以下命令来执行:
1. 用于自签名的密钥对 openssl genrsa -out pkey.pem 2048 openssl rsa -in pkey.pem -out public-pkey.pem -outform PEM -pubout
2. 证书签名请求(csr) openssl req -new -key pkey.pem -subj "/C=US/O=XXX/CN=XXX" -days 365 -out csrrequest.csr 3. 自签名证书 openssl x509 -in csrrequest.csr -req -signkey pkey.pem -days 365 -set_serial 0x12345 -sha256 -out selfsignedcert.pem
这是有效的!服务器接受了自签名证书并返回了经过服务器签名的证书。
对于pyOpenSSL,我使用以下代码:
1. 用于自签名的密钥对 psec = crypto.PKey() psec.generate_key(crypto.TYPE_RSA, 2048)
2. 证书签名请求(csr) csrrequest = crypto.X509Req() csrrequest.get_subject().C = "US" csrrequest.get_subject().O = "XXX" csrrequest.get_subject().CN = "XXX" csrrequest.set_pubkey(psec)
3. 自签名证书 selfsignedcert = crypto.X509() selfsignedcert.set_serial_number(12345) selfsignedcert.gmtime_adj_notBefore(0) selfsignedcert.gmtime_adj_notAfter(365*24*60*60) selfsignedcert.set_subject(csrrequest.get_subject()) selfsignedcert.set_issuer(selfsignedcert.get_subject()) selfsignedcert.set_pubkey(csrrequest.get_pubkey()) selfsignedcert.sign(psec, "sha256")
这不起作用!服务器不接受自签名证书。服务器无法签署和返回经过服务器签名的证书。

然而,使用pyOpenSSL时,我错过了创建自签名证书的openssl x509 -in csrrequest.csr -req输入...

我的问题在哪里?有谁知道我做错了什么吗?

谢谢!


请参考以下两个链接:如何使用您的认证机构签署证书签名请求?如何使用openssl创建自签名证书? 您还需要将自签名证书放置在适当的信任存储中。但是,我不确定如何在pyOpenSSL中完成此操作。 - jww
2个回答

2

您需要使用私钥签署CSR(类似于自签名证书,但是CA将在最终证书中用自己的签名替换此签名)。

尝试 csrrequest.sign(psec,"sha256")


或许需要更多的细节,请问您需要什么信息? - Til
非常好,这对我有用(如果没有这一步骤,在解析期间会出现错误)!谢谢! - ventaquil

0

有什么问题没有解决吗?

我注意到时间设置不正确

应该是:

selfsignedcert.gmtime_adj_notBefore(0)

selfsignedcert.gmtime_adj_notAfter(365*24*60*60)

如果你尝试过呢?

current_ts = int(datetime.datetime.now().timestamp())

selfsignedcert.gmtime_adj_notBefore(current_ts)

selfsignedcert.gmtime_adj_notAfter(current_ts + 365*24*60*60)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接