Last-modified: 2016-03-30 (水) 09:36:56
WindowsTips/実行ファイルにテスト目的のコードサイニング証明書を書き込みたい

概要

実行ファイルにテスト目的のコードサイニング証明書を書き込みます。

事前準備

  1. Windows SDK(makecert, cert2spc, pvk2pfx, signtool)がなければ入れる
  2. ルート証明書作成
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
    
    -
    !
     
    -
    |
    |
    |
    !
     
    -
    !
    
    REM コマンドにパスが通っていないので、everthingでパスを見つけた後、フォルダを移動するか、フルパスで実行していく
    cd C:\Program Files\Windows Kits\10\bin\x86
     
    REM ルート証明書のプライベートキーのパスワードを聞かれるので入力(テスト目的なので、以下全てのパスワードはなくてもOK)
    REM その後、ルート証明書のプライベートキーのパスワードを入れる
    REM -r:自己証明書
    REM コードサイニング証明書の署名アルゴリズムにおいて、md5, sha1は利用停止になったので、sha2のいずれかを指定する
    makecert -a <署名アルゴリズム(md5,sha1,sha256,sha384,sha512)> -e <有効期間終了日(MM/DD/YYYY)> -cy <証明書の種類(end:エンドエンティティ,authority:証明機関)> -r -n <証明書名(CN:発行元, O:組織名, C:国名, E:メールアドレス)> -sv <プライベートキー出力先> <ルート証明書出力先>
     
    REM 例
    makecert -a sha512 -e 12/31/2099 -cy authority -r -n "CN=testRootCA,O=testRootCA,C=JP,[email protected]" -sv D:\test_rootca.pvk D:\test_rootca.cer
  3. ルート証明書のインストール
    • D:\test_rootca.cerをダブルクリック
      信頼されたルート証明機関として登録
      0001.png

(本来)CAの作業

  1. デジタル署名作成
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    |
    !
     
    -
    !
    
    REM デジタル署名のプライベートキーのパスワードを聞かれるので入力
    REM その後、デジタル署名のプライベートキーのパスワード、ルート証明書のプライベートキーのパスワードを順に入れる
    makecert -a <署名アルゴリズム(md5,sha1,sha256,sha384,sha512)> -e <有効期間終了日(MM/DD/YYYY)> -cy <証明書の種類(end:エンドエンティティ,authority:証明機関)> -r -n <証明書名(CN:発行元, O:組織名, C:国名, E:メールアドレス)> -ic <ルート証明書パス> -iv <ルート証明書のプライベートキーパス> -sv <プライベートキー出力先> <デジタル署名出力先>
     
    REM 例
    makecert -a sha512 -e 12/31/2099 -cy end -n "CN=testInc,O=testInc,C=JP,[email protected]" -ic D:\test_rootca.cer -iv D:\test_rootca.pvk -sv D:\test.pvk D:\test.cer

開発者の作業

  1. ソフトウェア発行元証明書(.spc)作成
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
    
     
     
    -
    !
    
    cert2spc <デジタル署名パス> <ルート証明書パス> <ソフトウェア発行元証明書出力先>
     
    REM 例
    cert2spc D:\test.cer D:\test_rootca.cer D:\test.spc
  2. コードサイニング証明書(.pfx)作成
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    |
    !
     
    -
    !
    
    REM デジタル署名のプライベートキーのパスワードを入れる
    REM -f:既にあれば上書き
    pvk2pfx -pvk <デジタル署名のプライベートキーパス> -spc <ソフトウェア発行元証明書パス> -po <パスワード> -pfx <コードサイニング証明書出力先> -f
     
    REM 例
    pvk2pfx -pvk D:\test.pvk -spc D:\test.spc -po testpass -pfx D:\test.pfx -f
  3. 実行ファイルにコードサイニング証明書(.pfx)を書き込み
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
    
     
     
    -
    !
    
    signtool sign -f <コードサイニング証明書パス> -p <パスワード> <実行ファイルパス>
     
    REM 例
    signtool sign -f D:\test.pfx -p testpass D:\test.exe
  4. 実行ファイルのプロパティ-[デジタル署名]-[詳細]
    正常時
    0002.png
    バイナリ改竄後
    0003.png

検証時の環境