2012-02-14 2 views
4

現在、jarsignerを使用してjarファイルに署名しています。特定のクラスのSHA1-Digest値を表示して、リリース間でコードが変更されていないことを外部監査人に証明します。実際にキーを使用せずに、SHA1-Digestをjava Manifestファイルに作成することは可能ですか?

ダイジェスト情報を取得するためにMETA-INF/xxx.SFファイルのみを使用し、META-INF/xxx.DSAシグネチャブロックファイルは使用しません。

私たちのコードでダイジェスト計算が必要なだけなので、実際にキーを使わずに.SFファイルをいくつかのJavaツールで生成できるかどうか疑問に思っていました。

私はhttp://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.htmlを読んでいますが、キーが必須であるようです。

答えて

6

これが可能であるはずです。 MANIFEST.MFファイルには、それぞれのクラスファイルのBase64でエンコードされたSHA-1が含まれています。あなたの文書から

In the manifest file, the SHA digest value for each source file is the 
digest (hash) of the binary data in the source file. In the .SF file, 
on the other hand, the digest value for a given source file is the 
hash of the three lines in the manifest file for the source file. 

それはMANIFEST.MFに表示される、それはSFに表示されるので、SHA-1を計算し、すべてのクラスファイルを反復処理、フォーマットは、そのフォーマットをハッシュすることをファイル。

計算に関連するキーはありません。

例:「jce1_2_2.jar」(または適切に署名したもの)を考慮してください。これは、 "KeyAgreement.class" のBase64で(SHA1-1)(パスは関係しない)である

Name: javax/crypto/KeyAgreement.class 
SHA1-Digest: c2p0JimzpV0dG+NChGLl5cI7MuY= 
<empty line> 
  • 形態の

    1. MANIFEST.MFエントリを含んでいます。 3番目の空行に注意してください。行末はCRLF(Windows)です。

    2. ファイルのハッシュないMETA-INF/4JCEJARS.SFエントリ

      Name: javax/crypto/KeyAgreement.class 
      SHA1-Digest: whGBXE+AvYO6wAoVCdnocOPIrsE= 
      

    が、上記のこれらの3本のライン。

  • +0

    については

    だから、何のツールが存在しないと私は私のパッケージ中にMETA-INF/4JCEJARS.SFファイルを計算するためのいくつかのコードを書く必要があることを意味ですか?さらに、Java 6のソースを見て、jarsignerがこれらのSHA1-Digest行を生成する唯一のツールであるように見えます。 – cbliard

    +0

    私はそのようなツールを知らない。あなたが知っていたように、jarsignerは署名だけではなく、ハッシュを行います。しかし、このような "ジャーハッシュ"ツールを書くのは難しいことではありません。 もちろん、必ずしもJavaである必要はありません。上記の回答に対する私のテストは、他のコマンドラインツール(unzip.exe、base64.exe、hex2bin.exeなど)を使用して行われました。バッチスクリプトも同様に実行する必要があります。 Javaソリューションが必要ですか? – mgaert

    +0

    正解、私はJavaソリューションは必要ありません。実際、ダイジェストの計算方法を確認したり、同じ値を簡単に計算できるかどうかを確認するために、いくつかのコマンドラインツールを使用しました。それはあまりにも複雑ではなく、「ジャーハッシュ」ツールを書くことができます。どうもありがとう! – cbliard

    1

    署名検証に失敗します...

    なぜですか?

    JARファイルの検証 - > .SFファイル自体の署名を確認します。

    つまり、各署名ブロック(.DSA)ファイルに格納された署名が、証明書(または証明書チェーン)も.DSAファイルにも含まれる公開鍵に対応する秘密鍵を使用して実際に生成されたことを確認します。また、シグネチャが対応するシグネチャ(.SF)ファイルの有効なシグネチャであることを確認し、.SFファイルが改ざんされていないことを確認します。詳細 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html

    関連する問題