首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pyopenssl验证签名

使用pyopenssl验证签名
EN

Stack Overflow用户
提问于 2012-08-28 01:54:11
回答 1查看 8.6K关注 0票数 6

我相信从这个question开始,pyOpenSSL已经开始支持签名验证(从pyOpenSSL 0.11开始。

我正在从事一个项目,这是由其他人使用M2Crypto启动的。在Heroku这样的平台上包含M2Crypto真的很痛苦,因为它需要使用SWIG。因此,我正在尝试移除对M2Crypto的依赖,取而代之的是pyOpenSSL,它很容易通过Pip安装,并且不需要自定义构建包和更多与SWIG相关的东西。

我遇到的问题是替换一些代码:

代码语言:javascript
复制
key = cert.get_pubkey() # Cert is an M2Crypto X509 object
key = key.get_rsa()
ret = key.verify(hashed, self.sig)
if ret != 1:
    # Cert invalid ... etc.

理想情况下,我希望通过pyOpenSSL实现相同的功能,但我觉得我可能弄错了-我已经尝试使用:

代码语言:javascript
复制
crypto.verify(cert, self.sig, hashed, 'sha1')

但这失败了-

代码语言:javascript
复制
[('rsa routines', 'RSA_verify', 'bad signature')]

我不能确定它失败是因为签名实际上是错误的,还是因为我提供的crypto.verify值实际上不是它应该使用的值!

我一直在使用的原始代码是here,需要做大量的工作来整理,但我试图在完全重构之前一步一步地替换功能。如果有任何建议,我们将不胜感激!pyOpenSSL有能力在这里替代M2Crypto功能吗?我这样做对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-01 01:54:06

因此,答案来自于更多地阅读pyOpenSSL的源代码,其中一个指针来自exarkun。在这里,pyOpenSSL确实可以取代M2Crypto依赖,只需对底层代码进行很小的更改。

crypto.verify()函数here的单元测试显示了调用:

代码语言:javascript
复制
verify(good_cert, sig, content, digest)

因此,我上面的代码中有一个错误:

代码语言:javascript
复制
crypto.verify(cert, self.sig, hashed, 'sha1')

它应该简单地获取' data ',而不是散列,因为签名被应用于原始数据字符串:

代码语言:javascript
复制
# N.B. cert = X509 object (from crypto.load_certificate())
crypto.verify(cert, self.sig, data, 'sha1')

此行为似乎与M2Crypto的verify不同,后者采用散列数据字符串来执行其验证。注意,我还没有深入研究M2Crypto的函数来弄清楚到底是怎么回事。

感谢exarkunpyOpenSSL mailing list上的回应,它指出了我对verify()的调用中的错误,而不是我对verify()所做的事情的理解。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12146985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档