Web サイトから証明書をダウンロードし、その公開鍵を抽出して、メッセージの SHA1 署名を検証しようとしています。SO の他の場所 (こことここ) にいくつかのサンプル コードがありますが、何が間違っているのかまだわかりません。
import requests
from M2Crypto import BIO, RSA, EVP, X509
def verify_message(cert_url, msg, sig):
cert_text = requests.get(cert_url, verify=True)
cert = X509.load_cert_string(cert_text.content)
pubkey = cert.get_pubkey()
sig = sig.decode('base64')
# Write a few files to disk for debugging purposes
f = open("sig", "wb")
f.write(sig)
f.close()
f = open("msg", "w")
f.write(msg)
f.close()
f = open("mypubkey.pem", "w")
f.write(pubkey.get_rsa().as_pem())
f.close()
pubkey.reset_context(md='sha1')
pubkey.verify_init()
pubkey.verify_update(msg)
assert pubkey.verify_final(sig) == 1
これにより、次のアサーションエラーが発生します。
File "/tmp/test.py", line 71, in verify_message
assert pubkey.verify_final(sig) == 1
AssertionError
ただし、openssl
上記の Python スクリプトから生成されたファイルと共にコマンド ラインから使用すると、正常に動作します。
[jamie@test5 tmp]$ openssl dgst -sha1 -verify mypubkey.pem -signature sig msg
Verified OK
ここで壁にぶち当たりました。どんな提案でも大歓迎です。ありがとう!