改版履歴 |
版数 | 日付 | 内容 | 担当 |
V.1.0 | 2015/4/1 | 初版 | NII |
V.1.1 | 2017/2/28 | JKSコマンドの修正 署名確認作業の補足追加 | NII |
V.2.0 | 2018/2/26 | 動作環境を以下に変更 Windows10 | NII |
V.2.1 | 2018/7/9 | タイムスタンプ利用手順の追加 | NII |
目次
1. コード署名用証明書の利用
1-1. 前提条件
1-2. JKS (Javaキーストア) ファイルの作成
1-2-1. 事前準備
1-2-2. PKCS#12ファイルの作成
1-2-3. JKS (Javaキーストア) ファイルの作成
1-3. 署名
1-4. コード署名確認作業
1. コード署名用証明書の利用
1-1. 前提条件
OpenSSLコード署名用証明書を使用する場合の前提条件について記載します。適宜、コード署名用証明書をインストールする利用管理者様の環境により、読み替えをお願いします。
コマンドプロンプト上で実行するコマンドは、「 > 」にて示しています。
前提条件 |
- OpenSSLがインストールされていること
- Java SE Development Kit(以下JDKと呼ぶ)がインストールされていること
|
CSR作成時は既存の鍵ペアは使わずに、必ず新たにCSR作成用に生成した鍵ペアを利用してください。更新時も同様に、鍵ペアおよびCSRを新たに作成してください。鍵ペアの鍵長は2048bitにしてください。
1-2. JKS (Javaキーストア) ファイルの作成
本章ではJKS(Javaキーストア)ファイルの作成方法について記述します。
1-2-1. 事前準備
事前準備として、「ルートCA証明書」、「中間CA証明書」、「コード署名用証明書」を取得してください。
1-2-2. PKCS#12ファイルの作成
本項目ではWindowsOS上で任意のフォルダにPKCS#12ファイルを生成する方法を記述します。
以下は、例としてWindows10上での作成方法を記載します。
PKCS#12ファイルの作成 |
- 任意のフォルダ(ここではC:\temp\test2018とします)にて以下の3つのファイルを用意してください。
- 項目「鍵ペアの生成」にて生成した鍵ペアのファイル(servername.key)
- 項目「証明書の申請から取得まで」にて取得したコード署名用証明書(ここではtest.cerとします)
- 項目「1-2-1事前準備」にて用意した「ルートCA証明書」と 「中間CA証明書」を連結させたファイル(ここではchain.cerとします)
- 項目「1-2-1事前準備」にて用意した「ルートCA証明書」ファイル(RootCA.cer)
![](/confluence/download/attachments/26185157/worddav67f5fed9c7325d8b7b9e97017ede401d.png?version=1&modificationDate=1518052492000&api=v2)
CAfile に指定する証明書をDER形式からPEM形式に変換します。 ・Security Communication RootCA2の場合 openssl x509 -inform der -in SCRoot2ca.cer -outform pem -out SCRoot2ca.cer
・中間CA証明書SHA-256の場合 openssl x509 -inform der -in nii-odcacssha2.cer -outform pem -out nii-odcacssha2.cer |
コマンドプロンプト上にて上記で取得した「ルートCA証明書」と「中間CA証明書」を下記のコマンドにより、連結させてください。中間CA証明書の下部にルートCA証明書が併記されるファイルとなります。 > type (中間CA証明書のパス) (ルートCA証明書のパス) > (出力するファイル名) |
連結したファイルがPEM形式になっていることを確認してください。 例)PEM形式の証明書 -----BEGIN CERTIFICATE----- MIIEcTCCA1mgAwIBAgIIasWHLdnQB2owDQYJKoZIhvcNAQELBQAwbzELMAkGA1UE BhMCSlAxFDASBgNVBAcMC0FjYWRlbWUtb3BzMSowKAYDVQQKDCFOYXRpb25hbCBJ bnN0aXR1dGUgb2YgSW5mb3JtYXRpY3MxHjAcBgNVBAMMFU5JSSBPcGVyYXRpbmcg Q0EgLSBHMjAeFw0xNTAzMTIwMTA4MDJaFw0xNzA0MTEwMTA4MDJaMHAxCzAJBgNV (中略) LmeW0e/xkkxwdmKv5y5txLlFcp53AZl/vjn3BHp42PFkkTISEmAUiCtQ2A25QDRR RG33laC8E8Tl/SnOA8h95XQtGWm47PrIjXyYtIe0rFousbpIoW8MZw4gDXVQ3485 XEftqwwIMcLNxttJ6i6f9XVyPMRhHy9rdDPseHiXayxcBxJMuw== -----END CERTIFICATE----- |
コマンドプロンプトを開き、ファイルのある任意のフォルダ(ここではC:\temp\test2015)へ移動します。 > set Path=(OpenSSLインストールディレクトリ)\bin ※OpenSSLインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
移動後、下記のコマンドを実行しPKCS#12ファイルを生成してください。 > openssl pkcs12 -export -chain -inkey (鍵ペアのファイル名) -CAfile (ルートCA証明書と中間CA証明書を連結させたファイル) -in (コード署名用の証明書ファイル名) -out (PKCS#12形式で出力するファイル名) -name (コード署名用証明書のエイリアス名) -caname (ルートCA証明書と中間CA証明書のエイリアス名) |
![](/confluence/download/attachments/26185157/worddav086162f58b18922edb87a7554e9bf6d5.png?version=1&modificationDate=1518052492000&api=v2)
- 「Enter pass phrase for (鍵ペアファイル):」と表示されますので、鍵ペアファイルにアクセスさせるための、パスフレーズを入力してください。
![](/confluence/download/attachments/26185157/worddavfbaac9c73474d5a3b4b8c9ce8d40a47e.png?version=1&modificationDate=1518052492000&api=v2)
- 「Enter Export Password:」と表示されますので、PKCS#12形式のファイルを保護するためのアクセスPINとして任意の文字列を入力してください。
![](/confluence/download/attachments/26185157/worddav534a6a8eb9eeb98ac4e7e885bbf6a258.png?version=1&modificationDate=1518052492000&api=v2)
- 「Verifying - Enter Export Password:」と表示されますので、確認のため、同じアクセスPINを再入力してください。
![](/confluence/download/attachments/26185157/worddavccba3f60342b35990dd660b55f8127f7.png?version=1&modificationDate=1518052492000&api=v2)
- OpenSSLのコマンドが終了しますので、PKCS#12ファイルが作業ディレクトリに生成されていることを確認してください。
![](/confluence/download/attachments/26185157/worddav777be233efc3d79b6ce06d1716bf97d9.png?version=1&modificationDate=1518052492000&api=v2)
|
1-2-3. JKS (Javaキーストア) ファイルの作成
本項目ではWindowsOS上で任意のフォルダにJKS (Javaキーストア) ファイルを作成する方法を記述します。以下は、例としてWindows10上での作成方法を記載します。
JKS(Javaキーストア)の作成 |
- 任意のフォルダ(ここではC:\temp\test2015とします)にて以下のファイルを用意してください。
項目「1-2-2 PKCS#12ファイルの作成」にて作成したPKCS#12ファイル(test.p12) ![](/confluence/download/attachments/26185157/worddav6db515e9f7cc249368e6a7ce0479ce3c.png?version=1&modificationDate=1518052492000&api=v2)
コマンドプロンプトを開き、ファイルのある任意のフォルダ(ここではC:\temp\test2015)へ移動します。 > set Path=(JDKインストールディレクトリ)\bin ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
移動後、下記のコマンドを入力しJKS (Javaキーストア) ファイルを作成してください。 > keytool -importkeystore -srckeystore (PKCS#12ファイル名) -destkeystore (作成したいキーストアファイル名)-srcstoretype pkcs12 -deststoretype pkcs12 -destkeypass "(キーストアに設定したいパスワード)" -srcalias "( PKCS#12ファイルで利用されているエイリアス名)" -destalias "(登録したいエイリアス名)" |
※ PKCS#12ファイルで利用されているエイリアス名(別名)は以下コマンドでご参照ください。 keytool -v -list -keystore (PKCS#12ファイル名) |
![](/confluence/download/attachments/26185157/worddav741cbaf7545585b50fdad2271bebe708.png?version=1&modificationDate=1518052492000&api=v2)
- 「出力先キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するためのパスワードとして任意の文字列を入力してください。
![](/confluence/download/attachments/26185157/worddavb43dea5483c0ee4dad946213190de68e.png?version=1&modificationDate=1518052493000&api=v2)
- 「新規パスワードを再入力してください:」と表示されますので、確認のため、同じパスワードを再入力してください。
![](/confluence/download/attachments/26185157/worddavfa25bae9152c495794644d877e9510d8.png?version=1&modificationDate=1518052493000&api=v2)
- 「ソース・キーストアのパスワードを入力してください」と表示されますので、PKCS#12ファイルのアクセスPINを入力してください。
![](/confluence/download/attachments/26185157/worddavcd151e9110ecb5112ac05aad5acb02d4.png?version=1&modificationDate=1518052493000&api=v2)
- keytoolのコマンドが終了しますので、 JKS (Javaキーストア) ファイルが作業ディレクトリに作成されていることを確認してください。
![](/confluence/download/attachments/26185157/worddav0f39135916d9c152893e548aba71ea85.png?version=1&modificationDate=1518052493000&api=v2)
署名検証時に必要となるため下記のコマンドを入力しJKS (Javaキーストア) ファイルに「ルートCA証明書」をインポートしてください。 > keytool -importcert -keystore (キーストアファイル名) -alias (設定したいルートCA証明書のエイリアス名) -file (ルートCA証明書のファイル名) -trustcacerts |
![](/confluence/download/attachments/26185157/worddav17dfe2d1c4b7518987c7a60f62a31c27.png?version=1&modificationDate=1518052493000&api=v2)
- 「キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するパスワードを入力してください。
![](/confluence/download/attachments/26185157/worddav3135995251ede54228685f5b10e2b039.png?version=1&modificationDate=1518052493000&api=v2)
- 「この証明書を信頼しますか。 [いいえ]:」と表示されますので、「はい」と日本語入力で入力してください。
![](/confluence/download/attachments/26185157/worddavcfe98a794fed504b87d413eddb0799d1.png?version=1&modificationDate=1518052493000&api=v2)
- keytoolのコマンドが終了しますので、JKS (Javaキーストア) ファイルが更新されていることを確認してください。
![](/confluence/download/attachments/26185157/worddav0f39135916d9c152893e548aba71ea85.png?version=1&modificationDate=1518052493000&api=v2)
|
1-3. 署名
本章ではAndroid用(.apk形式)のファイルにWindowsOS上にて、デジタル署名をする方法について記述します。
併せてタイムスタンプを付与する場合と2通りの手順がありますので適した方をご選択ください。
署名作業(併せてタイムスタンプを付与しない場合) |
- 同一フォルダ上に署名するAndroid用(.apk形式)のファイル(test.apk)と項目1-2-3にて作成したJKS (Javaキーストア) ファイルを置きます。
![](/confluence/download/attachments/26185157/worddav273439ddc051af497dfc73847b666436.png?version=1&modificationDate=1518052493000&api=v2)
コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。 > set Path=(JDKインストールディレクトリ)\bin ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
![](/confluence/download/attachments/26185157/worddav91d3a443604acfc6167271675b0a8576.png?version=1&modificationDate=1518052494000&api=v2)
フォルダ移動後、署名したいAndroid用(.apk形式)のファイル(ここではtest.apk)に対して下記のコマンドにて署名を実行してください。 jarsigner -keystore (キーストアファイル名) (署名したいAndroid用(.apk形式)のファイル名) (キーストア内の証明書のエイリアス名) |
![](/confluence/download/attachments/26185157/worddav3d5294547c92ef65034b5ed2da9e1333.png?version=1&modificationDate=1518052494000&api=v2)
「キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するパスフレーズを入力してください。 ![](/confluence/download/attachments/26185157/worddavbb317f17f52e46ecb71ba13887245a4e.png?version=1&modificationDate=1518052494000&api=v2)
「jarは署名されました。」表示され、keytoolのコマンドが終了しますので、対象のAndroid用(.apk形式)ファイルが更新されていることを確認してください。 ![](/confluence/download/attachments/26185157/worddav63a473e688e875965995d0b4fa4b40d4.png?version=1&modificationDate=1518052494000&api=v2)
![](/confluence/download/attachments/26185157/worddav966c696917bf78fa7fc4acfe0534ec4a.png?version=1&modificationDate=1518052494000&api=v2)
※以下警告はタイムスタンプが付与されていないため、表示されているものです。 署名状況には問題ありません。警告内の署名書証明書の有効期限は証明書、証明書毎に異なります。 警告: -tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。 タイムスタンプがないと、署名者証明書の有効期限(20YY-MM-)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。
|
署名作業(併せてタイムスタンプを付与する場合) |
- 同一フォルダ上に署名するAndroid用(.apk形式)ファイル(test.apk)と項目1-2-3にて作成したJKS (Javaキーストア) ファイルを置きます。
![](/confluence/download/attachments/26185157/%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA_apk.PNG?version=1&modificationDate=1531126946000&api=v2)
コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。 > set Path=(JDKインストールディレクトリ)\bin ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
フォルダ移動後、署名したいAndroid用(.apk形式)ファイル(ここではtest.apk)に対して以下のコマンドにて署名を実行してください。 jarsigner -keystore(キーストアファイル名)(署名したいAndroid用(.apk形式)のファイル名) (キーストア内の証明書のエイリアス名) -tsa (タイムスタンプURL※) ※タイムスタンプURLに関しては登録担当者(各利用機関において、証明書発行のための審査と電子証明書自動発行支援システムの操作をする方)にお問い合わせください |
![](/confluence/download/attachments/26185157/apk_%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E4%BF%AE%E6%AD%A3.png?version=1&modificationDate=1531126946000&api=v2)
- 「キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するパスフレーズを入力してください。
![](/confluence/download/attachments/26185157/2apk_%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E4%BF%AE%E6%AD%A3%E6%B8%88%E3%81%BF.png?version=1&modificationDate=1531126946000&api=v2)
- 「jarは署名されました。」表示され、keytoolのコマンドが終了しますので、対象のAndroid用(.apk形式)ファイルが更新されていることを確認してください。
![](/confluence/download/attachments/26185157/apk%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%BE%8C.PNG?version=1&modificationDate=1531126946000&api=v2)
![](/confluence/download/attachments/26185157/apk_%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%884%E4%BF%AE%E6%AD%A3%E6%B8%88%E3%81%BF.png?version=1&modificationDate=1531126946000&api=v2)
※以下警告は署名状況には問題ありません。 警告: 署名者の証明書チェーンがまだ検証されていません。
|
1-4. コード署名確認作業
本章では、デジタル署名したAndroid用(.apk形式)のファイルのコード署名確認作業について記述します。
署名確認作業(併せてタイムスタンプを付与していない場合) |
コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。 > set Path=(JDKインストールディレクトリ)\bin ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
![](/confluence/download/attachments/26185157/worddav91d3a443604acfc6167271675b0a8576.png?version=1&modificationDate=1518052494000&api=v2)
以下のコマンドにて署名検証を実行してください。 > jarsigner -verify -keystore (キーストアファイル名) (検証したAndroid用(.apk形式)のファイル名) (コード署名用証明書のエイリアス名) |
![](/confluence/download/attachments/26185157/worddav20f4efccca658dbde9839e6bba730bec.png?version=1&modificationDate=1518052494000&api=v2)
- 「jarが検証されました。」と表示されることを確認します。
![](/confluence/download/attachments/26185157/worddave15a3ef9f78e6cbf23a4282e10a31e57.png?version=1&modificationDate=1518052494000&api=v2) ※以下警告はタイムスタンプが付与されていないため、表示されているものです。
署名状況には問題ありません。警告内の署名書証明書の有効期限は証明書、証明書毎に異なります。 警告: このjarには、タイムスタンプがない署名が含まれています。タイムスタンプがないと、署名者証明書の有効期限(20YY-MM-DD)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。
※2.のコマンド[-verbose -certs]を追加することで、署名者を表示することが可能です。
![](/confluence/download/attachments/26185157/worddav293fb9839bc8533577c24399e230be78.png?version=1&modificationDate=1518052494000&api=v2)
|
署名確認作業(併せてタイムスタンプを付与した場合) |
コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。 > set Path=(JDKインストールディレクトリ)\bin ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します > cd (作業ディレクトリ) ←作業ディレクトリ |
下記のコマンドにて署名検証を実施してください。 > jarsigner -verify -keystore (キーストアファイル名) (検証したAndroid用(.apk形式)のファイル名) (コード署名用証明書のエイリアス名) -verbose -certs |
![](/confluence/download/attachments/26185157/apk_%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%885.PNG?version=1&modificationDate=1531126946000&api=v2)
- 「jarが検証されました。」と表示されることを確認します。
また、以下の記載箇所からタイムスタンプが付与された時間を確認することができます。 タイムスタンプ付加者: "CN=_________, OU=___________, OU=__________, O=__________, L=__________, ST=__________, C=__________" 日時: 木 6 28 03:07:07 UTC 2018 ※タイムスタンプは協定世界時(UTC)で付与されています。日本標準時の現在時刻(JST)はUTCに9時間加算したものです。
![](/confluence/download/attachments/26185157/apk_%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E7%BD%B2%E5%90%8D%E7%A2%BA%E8%AA%8D7.png?version=1&modificationDate=1531126946000&api=v2)
※1.以下警告は署名状況には問題ありません。 警告: このjarには、証明書チェーンがまだ検証されていないエントリが含まれています。 このjarに含まれる署名済エントリは、指定された別名によって署名されていません。 このjarに含まれる署名済エントリは、このキーストア内の別名によって署名されていません。
|