2016-08-02 7 views
0

私のコンテンツはタイムスタンプを取得しようとしていますので、いつ変更されたのか分かりました。最初に私はシェルスクリプトを使用しましたが、私はそれを私のpythonプログラムに実装したいと思います。シェルスクリプトは今はうまく動作しますが、私のために動作するPythonのバージョンを手に入れることはできません。 これは私がrfc3161 packageでこれを模倣しようとしましたが、期待通りの検証を行っていない作業シェルバージョンpython rfc3161の検証に失敗しましたが、opensslの検証はOKです

in_file='test_content' 
out_file="${in_file}.tsr" 
ts_server='http://time.certum.pl/' 
openssl ts -query -data "$in_file" -sha1 -cert | curl -o "$out_file" -sSH 'Content-Type: application/timestamp-query' --data-binary @- "$ts_server" 
openssl ts -verify -data "$in_file" -in "$out_file" -CAfile "/usr/lib/ssl/certs/Certum_Trusted_Network_CA.pem" 
openssl ts -reply -in "$out_file" -text 

です。これはPythonコード

import rfc3161 

cert = file('/usr/lib/ssl/certs/Certum_Trusted_Network_CA.pem').read() 
rt = rfc3161.RemoteTimestamper('http://time.certum.pl/', certificate=cert) 
data_to_sign = file('test_content').read() 
print rt.timestamp(data=data_to_sign) 
>>> (False, 'Bad signature') 

どちらのスクリプトも同じことをする必要があるので、私は何が間違っているのか分かりません。誰かが私に、pythonバージョンの何が間違っているかの手がかりを与えることができますか?

答えて

0

問題は私が使ったライブラリrfc3161にあります。著者にはTSAの権限証明書のチェックが含まれていないようですので、私は図書館を変更しなければなりませんでした。

変更されたコードはのapi.pyにあります。

EDIT: 証明書は、一部の証明書ストアに対して検証する必要があります。あなたはそれを検証できない場合はuが例外

if certificate != "": 
    try: 
     certificate = X509.load_cert_der_string(encoder.encode(signed_data['certificates'][0][0])) 
     # YOU SHOULD VALIDATE THE CERTIFICATE AGAINST SOME CERTIFICATE STORE !!!! 
     if not validate_certificate(certificate): #NOTE: I am not ready with this function. 
      raise TypeError('The TSA returned certificate should be valid one') 
    except: 
     raise AttributeError("missing certificate") 
else: 
    try: 
     certificate = X509.load_cert_string(certificate) 
    except: 
     certificate = X509.load_cert_der_string(certificate) 

EDIT2上げる必要があります。検証のためを、あなたは、コードを使用することができますhereを説明:

予想通り今の検証が動作しています。

0

python-rfc3161の作成者です。不正な署名が返された場合は、TSAに対して宣言した証明書が実際に署名に使用された証明書ではないことを意味します。

melanhollyが提供するパッチは当てはまるとは思われません。証明書をバンドルされた証明書を使用して、その起点を確認できないかどうかを確認する必要はありません(PKIなど)。ここではそうではないようです。

+0

私はまず証明書を検証し、次にTSAの回答を検証する必要があります。元の投稿に追加します。ありがとう – melanholly

関連する問題