您确实可以使用 pyOpenSSL。正如您所说,您已经拥有 CA 根证书和私钥,并且 CSR 将由客户端发送,然后您可以使用加密功能从文件中读取所有这些(CA 证书、私钥和设备 CSR)或设法拥有他们在缓冲区。
使用以下功能开始。检查dir(crypto) and crypto.function_name.__doc__
python 解释器以获取更多信息 :) 您需要从 pyOpenSSL 导入加密
- crypto.load_certificate_request() - 获取设备 CSR obj
- crypto.load_privatekey() - 获取 CA 私钥的私钥 obj
- crypto.load_certificate() - 获取 CA 根证书
然后你可以编写简单的函数来返回证书
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
其中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 示例
希望这能让您对实施有所了解