nis*_*shi 9 openssl pyopenssl ssl-certificate m2crypto python-2.7
我是python的新手,仍在学习它,所以我的问题可能有点天真.请忍受它;)
问题是客户端将发送CSR,我想用我的CA根证书签名并将签名的证书返回给客户端.
我一直在使用此命令使用命令行来执行此操作
openssl x509 -req -in device.csr -CA root.pem -CAkey root.key -CAcreateserial -out device.crt -days 500
同样的事我想用python实现.我遇到过openssl pyopenssl的 python库
是否有可能使用这个库?怎么样 ?或者shoudl我去M2Crypto?
Oli*_*erM 12
维护者pyOpenSSL建议使用cryptography模块进行 X509 操作(请参阅文档页面顶部的注释: https: //www.pyopenssl.org/en/stable/api/crypto.html)。
以下是根据 CA 签名的 CSR 创建证书的代码:
def sign_certificate_request(csr_cert, ca_cert, private_ca_key):
cert = x509.CertificateBuilder().subject_name(
csr_cert.subject
).issuer_name(
ca_cert.subject
).public_key(
csr_cert.public_key()
).serial_number(
x509.random_serial_number()
).not_valid_before(
datetime.utcnow()
).not_valid_after(
# Our certificate will be valid for 10 days
datetime.utcnow() + timedelta(days=10)
# Sign our certificate with our private key
).sign(private_ca_key, hashes.SHA256())
# return DER certificate
return cert.public_bytes(serialization.Encoding.DER)
Run Code Online (Sandbox Code Playgroud)
cryptographyCSR 证书对象 - 可以从文件中加载x509.load_der_x509_csr()cryptography证书对象 - 可以从文件中加载x509.load_pem_x509_certificate()cryptography私钥对象 - 可以从文件中加载serialization.load_pem_private_key()Har*_*han 11
你确实可以使用pyOpenSSL.正如您所说,您已经拥有CA根证书和私钥,并且CSR将由客户端发送,然后您可以使用加密功能从文件中读取所有这些(CA证书,私钥和设备CSR)或管理他们在缓冲区.
使用以下功能开始.检查dir(crypto) and crypto.function_name.__doc__python解释器以获取更多信息:)您需要从pyOpenSSL导入crypto
然后你可以编写简单的函数来返回证书
def create_cert():
cert = crypto.X509()
cert.set_serial_number(serial_no)
cert.gmtime_adj_notBefore(notBeforeVal)
cert.gmtime_adj_notAfter(notAfterVal)
cert.set_issuer(caCert.get_subject())
cert.set_subject(deviceCsr.get_subject())
cert.set_pubkey(deviceCsr.get_pubkey())
cert.sign(CAprivatekey, digest)
return cert
Run Code Online (Sandbox Code Playgroud)
其中caCert,deviceCsr和CAprivatekey是来自三个以上函数的值.既然您已获得证书,您可以使用crypto.dump_certificate(crypto.FILETYPE_PEM, cert)您选择的文件名将其写入文件.
您可以根据自己的要求修改此功能.在此之后,您可以使用openssl命令验证使用CA根证书生成的设备证书,例如openssl verify -CApath <CA cert path> <name of device cert file>
您还可以从github中查看一些示例. M2Crypto示例,pyOpenSSL示例
希望这能让您了解实施情况
| 归档时间: |
|
| 查看次数: |
7749 次 |
| 最近记录: |