Python:如何使用pyopenssl验证sha1 rsa签名?

时间:2016-09-07 09:04:57

标签: python pyopenssl

我使用这种方法:

来自OpenSSL import crypto

cert = crypto.load_certificate(crypto.FILETYPE_PEM, open('pubkey.pem', 'rt').read())
crypto.verify(cert, sign_code, data, 'sha1)

但是,当我加载证书时,它显示错误:

Traceback (most recent call last):
  File "alipay.py", line 77, in <module>
    qrpay = Qrpay()
  File "alipay.py", line 32, in __init__
    self.cert = crypto.load_certificate(crypto.FILETYPE_PEM, '123')
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/crypto.py", line 1647, in load_certificate
    _raise_current_error()
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]

但是,如果我加载公钥,则表示成功:

crypto.load_publickey(crypto.FILETYPE_PEM, open('pubkey.pem', 'rt').read())

我做错了什么?

或者是否有其他方法可以进行验证?

1 个答案:

答案 0 :(得分:0)

希望我的发现可以帮助仍在寻找答案的人们。问题出在文件 pubkey.pem 中。即使在很多情况下公钥与证书相同,文件的格式也不同。

要使用方法 load_certificate ,文件必须以-----BEGIN CERTIFICATE-----

开头

要使用 load_publickey ,文件必须以-----BEGIN PUBLIC KEY-----

开头