Python Openssl签名和验证功能

时间:2013-09-25 21:08:55

标签: c++ python c openssl x509certificate

我正在努力扩展一些同事编写的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)

0 个答案:

没有答案