次のようにjarで自己署名しようとしたとき。
jarsigner -keystore my keystore myjar.jar myalias
次のような警告が表示されます。
-tsaまたは-tsacertは提供されず、このjarはタイムスタンプされません。タイムスタンプがないと、ユーザーは署名者証明書の有効期限(2014-05-08)または将来の失効日の後、このjarを検証できない可能性があります。
問題の解決にご協力ください。
最近のJava 7は、10年前から存在していた何かについて(礼儀正しい?)警告を提供します...
信頼できるタイムスタンプは、Java 5(2004)で導入されました。証明書の有効期限が切れたときに、開発者が「展開されたJARファイルに毎年署名し直す」ことを強制されないようにするための動機付けでした。
→ http://docs.Oracle.com/javase/1.5.0/docs/guide/security/time-of-signing.html
URLベースのタイムスタンプ機関(TSA)は通常、発行された認証局(CA)によって提供され、同じ証明書発行されたCAで動作します。たとえば、digicert tsa urlは次のようにアクセスできます。
jarsigner -tsa http://timestamp.digicert.com [.. other options]
→ http://www.digicert.com/code-signing/Java-code-signing-guide.htm
自己署名証明書によるタイムスタンプmay be(1)TSAタイムスタンプは信頼できる腕の長さのトランザクションである必要があるため(「自己タイムスタンプ」を除外する)、(2)典型的なTSA URLは、同じCA組織によって提供された証明書で動作するように設定されています(つまり、TSA URLは自己署名証明書を処理しません)
更新:
自己署名証明書にタイムスタンプを付けるために試行するURL:
-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp
(brad-turekによるコメントごと)プライベートネットワークの場合、Thales(nCipher)Time Stamp Server(または歴史的にOpenTSA)などの内部タイムスタンプ機関を検討できます
この警告は、jarの証明書が5月に期限切れになることを示しています。したがって、ユーザーはこの日付以降にプログラムを実行できなくなります。
状況を改善するために、タイムスタンプ機能が追加されました。このようにして、ユーザーに次のように伝えることができます。「この時点で証明書を使用しました(タイムスタンプ機関-tsaによって提供および検証されます)。 jarを変更および再署名しない限り、証明書の有効期限が切れた後でも実行されます。これは、ユーザーが作成時に証明書が実際に有効であることがわかるためです。
参考: http://docs.Oracle.com/javase/7/docs/technotes/guides/security/time-of-signing.html
tl; dr:警告を無視した場合、jarは14-05-08以降は実行されません。タイムスタンプを追加すると、何も変更しない限り実行されます。
よろしく
私は同じ問題に直面していました。タイムスタンプがなければ、jarは署名されません。
-tsa http://timestamp.digicert.com
を追加すると、警告もエラーも発生しませんが、jarは署名されません。
しかし、その後、私は次の部分を追加し、それは私のために働いた。
-tsacert alias
だから、基本的に私の最後のコマンドは
jarsigner -verbose -tsa http://timestamp.digicert.com -tsacert alias -sigalg SHA256withRSA -digestalg SHA1 -keystore my-release-key.keystore Android-release-unsigned.apk alias_name
コマンドのalias_name
とkeystore
の_は同じでなければなりません。