我正在努力扩展一些同事编写的python代码,以便在OpenSSL库中使用X509证书。我已经设法让除了一些OpenSSL功能以外的所有功能都能正常工作。我正在使用的库/函数是
from OpenSSL.crypto import FILETYPE_PEM
from OpenSSL.crypto load_certificate, verify, sign, load_privatekey
我目前正在使用
在我的本地计算机上创建证书 openssl req -x509 -newkey rsa:2048 -out rootcert.pem -outform PEM -days 1825
然后将其“推送”到服务器(也在本地计算机上),然后返回一个64个字符长的随机字母数字字符串。然后我拿着字符串并使用
签名 openssl rsautl -sign -inkey rootprivkey.pem -in string -out signedstring
当我将签名的随机字符串推送到服务器时,它会使用我之前发送的证书验证(使用OpenSSL.crypto.verify),该过程失败。但是,如果我在命令行(openssl rsautl -verify -inkey rootprivkey.pem -in signedstring
)上使用验证功能,它就可以工作。
如果我将私钥推送到服务器并使用OpenSSL.crypto.sign(sign(private key, data, digest)
)函数签署相同的随机字符串并将其放入验证(verify(certificate, signature, data, digest)
)函数中,作品。
我在签名字符串时尝试了所有不同类型的填充,但没有一个工作。我还尝试首先对字符串进行摘要哈希,然后根据SO上的旧问题签署该文件:
openssl dgst -sha1 -binary < string > digeststring
openssl rsautl -sign -inkey rootprivkey.pem -keyform PEM -in digeststring > signedstring
但显然这也不起作用。
如果我错误地使用OpenSSL.crypto库,我不知道是否要生成证书并正确签署字符串(我已多次检查以确保将正确的变量传递给OpenSSL函数),或者如果命令行函数和python函数不兼容。
供参考:
Python 2.7.3
OpenSSL 1.0.1 (March 12)