子ページ
  • Android用 .apk形式編

比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。
コメント: バージョン 21 から復元

改版履歴

版数

日付

内容

担当

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.12018/7/9タイムスタンプ利用手順の追加NII
V.2.22020/6/4中間CA証明書のURLとリポジトリのURLの変更NII
V.2.32020/12/22中間CA証明書のURL変更NII
V.2.42020/12/24鍵長の変更NII
V.2.52021/5/31コード署名用証明書の中間CA証明書を修正

NII

V.2.62023/5/19コード署名用証明書のCSR作成に関する手順を削除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. 「証明書の申請から取得まで」で受領したコード署名用証明書を任意の名前で任意の場所に保存してください。

  2. 「ルートCA証明書」と「中間CA証明書」を準備し、この2つを連結させます。下記URLより、リポジトリへアクセスしてください。

    「中間CA証明書」を下記リポジトリより取得してください。
    セコムパスポート for Member 2.0 PUB リポジトリ:
    https://repo1.secomtrust.net/spcpp/pfm20pub/index.html


    2021年5月31日00:00以前の発行証明書が対象】
    リポジトリ内にある「証明書の種類」より中間CA証明書を取得してください。

    https://repo1.secomtrust.net/spcpp/pfm20pub/codecag2/CODECAG2.cer

    次に、「ルートCA証明書」を下記リポジトリより取得してください。


    次に、「ルートCA証明書」を下記リポジトより取得してください。

    SHA-256

    Security Communication RootCA2 リポジトリ:
    https://repository.secomtrust.net/SC-Root2/index.html


     


    SHA-256


    Security Communication RootCA2 証明書:
    https://repository.secomtrust.net/SC-Root2/SCRoot2ca.cer

    2021年5月31日00:00以後の発行証明書が対象】

    リポジトリ内にある「証明書の種類」より中間CA証明書を取得してください。

    https://repo1.secomtrust.net/spcpp/pfm20pub/codecag2/CODECAG2SCROOTCA3.cer

    次に、「ルートCA証明書」を下記リポジトより取得してください。
    Security Communication RootCA3 リポジトリ:
    https://repository.secomtrust.net/SC-Root3/index.html

    Security Communication RootCA3 証明書:
    https://repository.secomtrust.net/SC-Root3/SCRoot3ca.cer

アンカー
_Toc505846934
_Toc505846934
1-2-2. PKCS#12ファイルの作成

...

PKCS#12ファイルの作成

  1. 任意のフォルダ(ここではC:\temp\test2018とします)にて以下の3つのファイルを用意してください。
    1. 項目「鍵ペアの生成」にて生成した鍵ペアのファイル(servername.key)
    2. 項目「証明書の申請から取得まで」にて取得したコード署名用証明書(ここではtest.cerとします)
    3. 項目「1-2-1事前準備」にて用意した「ルートCA証明書」と 「中間CA証明書」を連結させたファイル(ここではchain.cerとします)
    4. 項目「1-2-1事前準備」にて用意した「ルートCA証明書」ファイル(RootCA.cer)


  2. CAfile に指定する証明書をDER形式からPEM形式に変換します。

    ・Security Communication RootCA2の場合
    openssl x509 -inform der -in SCRoot2ca.cer -outform pem -out SCRoot2ca.cer
    ・中間CA証明書SHA-256の場合
    ・中間CA証明書(2021年5月31日00:00以前の発行証明書が対象)の場合
    openssl x509 -inform der -in nii-odcacssha2CODECAG2.cer -outform pem -out nii-odcacssha2CODECAG2.cer

  3. コマンドプロンプト上にて上記で取得した「ルートCA証明書」と「中間CA証明書」を下記のコマンドにより、連結させてください。中間CA証明書の下部にルートCA証明書が併記されるファイルとなります。

    > type (中間CA証明書のパス) (ルートCA証明書のパス) > (出力するファイル名)
  4. 連結したファイルがPEM形式になっていることを確認してください。
    例)PEM形式の証明書

    -----BEGIN CERTIFICATE-----

    MIIEcTCCA1mgAwIBAgIIasWHLdnQB2owDQYJKoZIhvcNAQELBQAwbzELMAkGA1UE

    BhMCSlAxFDASBgNVBAcMC0FjYWRlbWUtb3BzMSowKAYDVQQKDCFOYXRpb25hbCBJ

    bnN0aXR1dGUgb2YgSW5mb3JtYXRpY3MxHjAcBgNVBAMMFU5JSSBPcGVyYXRpbmcg

    Q0EgLSBHMjAeFw0xNTAzMTIwMTA4MDJaFw0xNzA0MTEwMTA4MDJaMHAxCzAJBgNV

    (中略)

    LmeW0e/xkkxwdmKv5y5txLlFcp53AZl/vjn3BHp42PFkkTISEmAUiCtQ2A25QDRR

    RG33laC8E8Tl/SnOA8h95XQtGWm47PrIjXyYtIe0rFousbpIoW8MZw4gDXVQ3485

    XEftqwwIMcLNxttJ6i6f9XVyPMRhHy9rdDPseHiXayxcBxJMuw==

    -----END CERTIFICATE-----

  5. コマンドプロンプトを開き、ファイルのある任意のフォルダ(ここではC:\temp\test2015)へ移動します。

    > set Path=(OpenSSLインストールディレクトリ)\bin
    ※OpenSSLインストールディレクトリをプログラムを探すディレクトリに指定します
    > cd (作業ディレクトリ) 作業ディレクトリ
  6. 移動後、下記のコマンドを実行しPKCS#12ファイルを生成してください。

    > openssl pkcs12 -export -chain -inkey (鍵ペアのファイル名) -CAfile (ルートCA証明書と中間CA証明書を連結させたファイル) -in (コード署名用の証明書ファイル名) -out (PKCS#12形式で出力するファイル名) -name (コード署名用証明書のエイリアス名) -caname (ルートCA証明書と中間CA証明書のエイリアス名)


  7. 「Enter pass phrase for (鍵ペアファイル):」と表示されますので、鍵ペアファイルにアクセスさせるための、パスフレーズを入力してください。


  8. 「Enter Export Password:」と表示されますので、PKCS#12形式のファイルを保護するためのアクセスPINとして任意の文字列を入力してください。


  9. 「Verifying - Enter Export Password:」と表示されますので、確認のため、同じアクセスPINを再入力してください。


  10. OpenSSLのコマンドが終了しますので、PKCS#12ファイルが作業ディレクトリに生成されていることを確認してください。


...

署名作業(併せてタイムスタンプを付与しない場合)

  1. 同一フォルダ上に署名するAndroid用(.apk形式)のファイル(test.apk)と項目1-2-3にて作成したJKS (Javaキーストア) ファイルを置きます。


  2. コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。

    > set Path=(JDKインストールディレクトリ)\bin
    ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します
    > cd (作業ディレクトリ) 作業ディレクトリ


  3. フォルダ移動後、署名したいAndroid用(.apk形式)のファイル(ここではtest.apk)に対して下記のコマンドにて署名を実行してください。

    jarsigner -keystore (キーストアファイル名) (署名したいAndroid用(.apk形式)のファイル名)  (キーストア内の証明書のエイリアス名)


  4. 「キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するパスフレーズを入力してください。



  5. 「jarは署名されました。」表示され、keytoolのコマンドが終了しますので、対象のAndroid用(.apk形式)ファイルが更新されていることを確認してください。




    ※以下警告はタイムスタンプが付与されていないため、表示されているものです。
    署名状況には問題ありません。警告内の署名書証明書の有効期限は証明書、証明書毎に異なります。
    警告:
    -tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。
    タイムスタンプがないと、署名者証明書の有効期限(20YY-MM-)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。

署名作業(併せてタイムスタンプを付与する場合署名作業(併せてタイムスタンプを付与する場合)

  1. 同一フォルダ上に署名するAndroid用(.apk形式)ファイル(test.apk)と項目1-2-3にて作成したJKS (Javaキーストア) ファイルを置きます。


  2. コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。

    > set Path=(JDKインストールディレクトリ)\bin
    ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します
    > cd (作業ディレクトリ) ←作業ディレクトリ

  3. フォルダ移動後、署名したいAndroid用(.apk形式)ファイル(ここではtest.apk)に対して以下のコマンドにて署名を実行してください。

    jarsigner -keystore(キーストアファイル名)(署名したいAndroid用(.apk形式)のファイル名)  (キーストア内の証明書のエイリアス名) -tsa (タイムスタンプURL※)

    タイムスタンプURLに関しては登録担当者(各利用機関において、証明書発行のための審査と電子証明書自動発行支援システムの操作をする方)にお問い合わせください※タイムスタンプURLに関しては登録担当者(各利用機関において、証明書発行のための審査と電子証明書自動発行支援システムの操作をする方)にお問い合わせください


  4. 「キーストアのパスワードを入力してください:」と表示されますので、JKS (Javaキーストア) ファイルを保護するパスフレーズを入力してください。 


  5. 「jarは署名されました。」表示され、keytoolのコマンドが終了しますので、対象のAndroid用(.apk形式)ファイルが更新されていることを確認してください。 





    ※以下警告は署名状況には問題ありません。
    警告: 
    署名者の証明書チェーンがまだ検証されていません。
     

...

本章では、デジタル署名したAndroid用(.apk形式)のファイルのコード署名確認作業について記述します。

署名確認作業(併せてタイムスタンプを付与していない場合署名確認作業(併せてタイムスタンプを付与していない場合)

  1. コマンドプロンプトを実行し、署名対象ファイルのあるフォルダへ移動します。

    > set Path=(JDKインストールディレクトリ)\bin
    ※JDKインストールディレクトリをプログラムを探すディレクトリに指定します
    > cd (作業ディレクトリ) 作業ディレクトリ



  2. 以下のコマンドにて署名検証を実行してください。

    > jarsigner -verify -keystore (キーストアファイル名) (検証したAndroid用(.apk形式)のファイル名) (コード署名用証明書のエイリアス名)


  3. 「jarが検証されました。」と表示されることを確認します。

    ※以下警告はタイムスタンプが付与されていないため、表示されているものです。

    署名状況には問題ありません。警告内の署名書証明書の有効期限は証明書、証明書毎に異なります。
    警告:
    このjarには、タイムスタンプがない署名が含まれています。タイムスタンプがないと、署名者証明書の有効期限(20YY-MM-DD)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。

    ※2.のコマンド[-verbose -certs]を追加することで、署名者を表示することが可能です。


...