質問

Advanced Search

Solution ID : SOT0012

Last Modified : 06/22/2022

[CertCentral] Java 用コードサイニング証明書のCSR 生成/インストール/署名方法

Problem

コードサイニング証明書for Javaを取得しました。

jarsignerでの署名方法を教えてください。

Solution

必ずお読みください

  • 本文書の内容によって生じた結果の影響について、弊社では一切の責任を負いかねますこと予めご了承ください。
  • 本文書は基本的な構成を想定しています。お客様のシステム環境や構成、設定状況などにより、手順や画面表示が変わることがあります。
  • 本文書の手順で動作しない場合やアプリケーション及びツールの仕様及び設定手順等に関する不明な点は、当社ではサポートできませんので、製品のマニュアルをお読みいただくか、開発元にご確認ください。

はじめに

  • JAVA 用コードサイニング証明書の申請にはCSRの準備が必要です。
    CSR生成やインストール、署名作業はJDKのKeytoolを利用しますので、
    JDKがインストールされていない場合は以下からダウンロードの上インストールします。
    Java SE Downloads

  • この手順では以下の名称を使っています。
    キーストア名 keystore.jks
    エイリアス名 code_cert
    キーストアパスワード spassword

 

秘密鍵とCSRの生成

  1. keytool を実行し、コマンドラインで以下の各項目を入力します。

    # keytool -genkey -alias <エイリアス名> -keyalg RSA -keysize <鍵サイズ> -keystore  <キーストア名> -storepass <キーストアパスワード>

    (実行例)鍵アルゴリズムRSA、鍵サイズ 3072bitで作成します。

  2.  # keytool -genkey -alias code_cert -keyalg RSA -keysize 3072 -keystore keystore.jks -storepass spassword

    詳細情報

  3. 続いて、ディスティングイッシュネーム情報を入力していきます。
    ※CertCentralでは認証情報を元に証明書を発行するため、この情報が必ずしも証明書の情報に反映されるわけではありません。

    (実行例)

    姓名は何ですか。
      [Unknown]: Sample K.K.
    組織単位名は何ですか。
     [Unknown]: Tech Support
    組織名は何ですか。
     [Unknown]: Sample K.K.
    都市名または地域名は何ですか。
     [Unknown]: Chuo-ku
    都道府県名または州名は何ですか。
     [Unknown]: Tokyo
    この単位に該当する2文字の国コードは何ですか。
     [Unknown]: JP
    CN=Sample K.K., OU=Tech Support, O=Sample K.K., L=Chuo-ku, ST=Tokyo, C=JPでよろしいですか。
     [いいえ]: y

    90日間有効な2,048ビットのRSAのキー・ペアと自己署名型証明書(SHA256withRSA)を生成しています ディレクトリ名: CN=Sample K.K., OU=Tech Support, O=Sample K.K., L=Chuo-ku, ST=Tokyo, C=JP

  4. CSRファイルを作成するため、以下のコマンドを入力します。
     
    # keytool -certreq -alias <コードサイニング証明書for Javaエイリアス名> -file <CSRファイル名> -keystore <キーストア名>

    (実行例)

     # keytool -certreq -alias code_cert -file csr.txt -keystore keystore.jks
    キーストアのパスワードを入力してください: spassword

    上記の例の場合、csr.txt というCSRファイルが作成されます。
    申請時にこのCSRファイルアップロードするか、メモ帳などで開いてテキストを張り付けて申請します。



証明書のインストール

CSRを作成したキーストアに、発行された証明書をインストールする必要があります。

  1. 発行通知メールは、申請者に通知されますのでご確認ください。メールに添付されているp7bファイルを保存するか、CertCentralからp7bファイルをダウンロードします。
    ※p7bファイルには証明書と中間CA証明書が含まれます。


  2. コードサイニング証明書のインストール

    保存したp7bファイルをキーストアにインポートします。

    (実行例) 

     # keytool -import -trustcacerts -alias code_cert -keystore keystore.jks -file Sample_K_K.p7b

    キーストアのパスワードを入力してください: spassword
    証明書応答がキーストアにインストールされました


  3. インストール結果の確認
    以下のコマンドでKeyStoreにインストールされた内容を確認できます。

    (実行例)

     # keytool -list -v -keystore keystore.jks
    キーストアのパスワードを入力してください:spassword
    キーストアのタイプ: PKCS12 
    キーストア・プロバイダ: SUN

    キーストアには1エントリが含まれます

    別名: code_cert
    作成日: 2021/01/26
    エントリ・タイプ: PrivateKeyEntry
    証明書チェーンの長さ: 3
    証明書[1]:
    所有者: CN=Sample K. K., O= Sample K. K., L=Chuo-ku, ST=Tokyo, C=JP
    発行者: CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US
    シリアル番号: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    有効期間の開始日: Tue Jan 26 09:00:00 JST 2021終了日: Wed Feb 02 08:59:59 JST 2022
    証明書のフィンガプリント:
                 SHA1: XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX
                 SHA256: XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.
     署名アルゴリズム名: SHA256withRSA
    サブジェクト公開キー・アルゴリズム: 2048ビットRSAキー
    バージョン: 3

              <省略>

    証明書[2]:
    所有者: CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US
    発行者: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
    シリアル番号: 409181b5fd5bb66755343b56f955008
    有効期間の開始日: Tue Oct 22 21:00:00 JST 2013終了日: Sun Oct 22 21:00:00 JST 2028
    証明書のフィンガプリント:
                SHA1: 92:C1:58:8E:85:AF:22:01:CE:79:15:E8:53:8B:49:2F:60:5B:80:C6
                SHA256: 51:04:47:06:BD:23:7B:91:B8:9B:78:13:37:E6:D6:26:56:C6:9F:0F:CF:FB:E8:E4:37:41:36:79:48:12:78:62
    署名アルゴリズム名: SHA256withRSA
    サブジェクト公開キー・アルゴリズム: 2048ビットRSAキー
    バージョン: 3

             <省略>

     証明書[3]:
    所有者: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
    発行者: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
    シリアル番号: ce7e0e517d846fe8fe560fc1bf03039
    有効期間の開始日: Fri Nov 10 09:00:00 JST 2006終了日: Mon Nov 10 09:00:00 JST 2031
    証明書のフィンガプリント:
                SHA1: 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
                SHA256: 3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C
    署名アルゴリズム名: SHA1withRSA (弱)
    サブジェクト公開キー・アルゴリズム: 2048ビットRSAキー
    バージョン: 3


             <省略>

    *******************************************
    *******************************************

    Warning: はSHA1withRSA署名アルゴリズムを使用しており、これはセキュリティ・リスクとみなされます。このアルゴリズムは将来の更新で無効化されます。


  4. キーペアファイルのバックアップ

    ハードウェア障害などに備え、Keystoreファイルをバックアップしておきます。
    デフォルトではユーザのホームディレクトリに作成されますが、お客様の環境により異なります。

署名方法

  1. 対象となるJavaアプレットが署名されていないことを確認します。
    JARファイル(例 sample.jar)があるフォルダーで以下のコマンドを実行します。

    (実行例) 
    jarsigner -verify -verbose -certs sample.jar

     <省略>

    jarは署名されていません。

  2. ファイルへタイムスタンプ付きで署名します。

    (実行例)

    jarsigner -tsa http://timestamp.digicert.com -keystore keystore.jks sample.jar code_cert
    キーストアのパスワードを入力してください:
    jarは署名されました。

    署名者の証明書は2022-02-02に期限切れになります。
    タイムスタンプは2031-01-06に期限切れになります。


  3. 対象となるJavaアプレットに正しく署名されたことを確認
     
    (実行例)
    jarsigner -verify -verbose -certs sample.jar

       <省略>

    - 署名者: "CN=Sample K. K., O=Sample K. K., L=Chuo-ku, ST=Tokyo, C=JP"
              ダイジェスト・アルゴリズム: SHA-256
              署名アルゴリズム: SHA256withRSA、2048ビット・キー
              タイムスタンプ付加者: "CN=DigiCert Timestamp 2021, O="DigiCert, Inc.", C=US" 日時: 水 1月 27 05:48:03 UTC 2021
              タイムスタンプのダイジェスト・アルゴリズム: SHA-256
              タイムスタンプの署名アルゴリズム: SHA256withRSA、2048ビット・キー

    jarが検証されました。

    署名者の証明書は2022-02-02に期限切れになります。
    タイムスタンプは2031-01-06に期限切れになります。

 

USBトークンを利用した署名については以下を参照ください(なお、USBトークン名称が日本語の場合エラーとなりますので証明書の組織名=コモンネームを日本語にした場合、英語表記で再度申請してください)。
Signing Java .jar Files with a Hardware Token in Windows
https://www.digicert.com/kb/code-signing/java-ev-code-signing-certificate.htm


JDKに関する詳しい使い方などは、オラクル社のWebサイトを確認ください。