使用pyOpenSSL我想创建
当我使用openSSL命令行工具时,我使用以下命令来执行此操作:
用于自签名的密钥对
openssl genrsa -out pkey.pem 2048
openssl rsa -in pkey.pem -out public-pkey.pem -outform PEM -pubout
证书签名请求(csr)
openssl req -new -key pkey.pem -subj "/C=US/O=XXX/CN=XXX" -days 365 -out csrrequest.csr
自签名证书
openssl x509 -in csrrequest.csr -req -signkey pkey.pem -days 365 -set_serial 0x12345 -sha256 -out selfsignedcert.pem
这有效!服务器接受自签名证书并返回服务器签名证书。
对于pyOpenSSL,我使用以下代码:
用于自签名的密钥对
psec = crypto.PKey()
psec.generate_key(crypto.TYPE_RSA, 2048)
证书签名请求(csr)
csrrequest = crypto.X509Req()
csrrequest.get_subject().C = "US"
csrrequest.get_subject().O = "XXX"
csrrequest.get_subject().CN = "XXX"
csrrequest.set_pubkey(psec)
自签名证书
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
的输入来创建自签名证书...
我的错在哪里?有谁知道我做错了什么?
谢谢!
答案 0 :(得分:1)
您需要使用私钥对CSR进行签名(类似于自签名证书,但是CA会在最终证书中用自己的签名替换此签名)。
尝试csrrequest.sign(psec,"sha256")
答案 1 :(得分: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)