オレオレ電子証明書の作成 anchor.png

一般的には電子証明書は以下の手順で作成する。

  • 秘密鍵を作成する。
  • 作成した秘密鍵に対する公開鍵を作成する。
  • 署名要求証明書(CSR)を作成する。
    中身は公開鍵と会社情報や連絡先等の情報。
  • CSRを第3者認証機関に提出し,認証機関の秘密鍵で署名する。
    CSRの中身をハッシュ化し,ハッシュ値に対して秘密鍵で署名する。
  • 作成された証明書を受け取り,サーバに保管して利用する。

第3者認証機関にCSRを提出し公的な認証を受ける場合,お金がかなりかかる。

なので,テスト目的や社内で使用するために,デジタル署名をする時に使用する独自の自己電子証明書をWindowsマシンで作成してみる。

Page Top

opensslコマンドで自己電子証明書を作成する anchor.png

OpenSSLはハッシュ・共通鍵暗号・公開鍵暗号・署名などに関する機能を集約したソフトウェア。
秘密鍵,公開鍵,サーバ証明書,クライアント証明書なんかを作成する時に使用できる。

OpenSSLはここからインストーラーをダウンロードし,ダブルクリックでインストールできる。
MSYS2​/MinGW-w64環境があれば,パッケージ管理ツールpacmanでインストールできる。

$ pacman -S mingw-w64-x86_64-openssl mingw-w64-i686-openssl

opensslの主なオプション。

オプション説明
versionバージョンを表示。
randランダムデータを作成する。
encエンコードする。
genrsaRSA秘密鍵を作成。
rsaRSA秘密鍵関連の処理をする。
req証明書署名要求および証明書作成。
-new新しく証明書署名要求を作成する。-keyにて指定した秘密鍵を利用して公開鍵を作成する。
-x509証明書署名要求ではなく自己署名証明書を出力する。
-in入力ファイル名を指定する。
-out出力ファイル名を指定する。
-pubin公開鍵を入力。
-pubout公開鍵を出力。
-sha512証明書のメッセージダイジェストを作成する時にsha512アルゴリズムを指定する。
-aes256AES256で暗号化する。
-binaryバイナリで出力する。
-textテキストで出力する。
-base64BASE64で出力する。
-hex16進数で出力する。
-noout末尾にPEM(-----BEGIN...)を出力しない。

opensslでファイルの拡張子。

拡張子説明
.pemPEM形式(-----BEGIN ...)。中身は秘密鍵だったり公開鍵だったり電子証明書だったりする。
Base64でエンコードしたテキストファイル。
.key鍵ファイル。秘密鍵や公開鍵。
ファイルはpemと同じ形式。
.pub鍵ファイル。公開鍵。
ファイルはpemと同じ形式。
.csr証明書署名要求(Certificate Signing Request)
RFC2986(PKCS #10)で定められているものをBase64でエンコードしたテキストファイル。
.crt, .cer電子証明書(Certificate)
ファイルはpemと同じ形式。
.derX.509形式の電子証明書や秘密鍵をバイナリ形式で保存する。
.ppkPuTTYが扱う鍵ファイル形式。
Page Top

秘密鍵の生成 anchor.png

秘密鍵は公開鍵方式のRSAで鍵長を2048bitでパスフレーズ無しで作成する。
以下のようにopensslコマンドを使って作成する。

> openssl genrsa 2048 > OreOrePrivate.key
Page Top

自己電子証明書の生成 anchor.png

作成した秘密鍵で署名した自己電子証明書を作成する。

> openssl req -new -x509 -days 3650 -key OreOrePrivate.key -sha512 -out OreOreCertificate.cer

-daysオプションで10年間有効な自己電子証明書にしている。-sha512オプションで署名アルゴリズムをsha512に指定している。
作成した自己電子証明書には,署名と公開鍵が含まれている。

Page Top

自己電子証明書を確認 anchor.png

作成した自己電子証明書の中身を確認してみる。

> openssl x509 -in OreOreCertificate.cer -text -noout
Page Top

pfxファイルを作成する anchor.png

秘密鍵と自己電子証明書(公開鍵と署名)から,pfxファイル(個人情報交換ファイル)を作成する。
pfxファイルは秘密鍵と対応するX.509形式の電子証明書(公開鍵と署名)をセットにしたファイルで,Microsoft製品で電子証明書の登録時やデジタル署名をする時なんかによく使われているファイル形式。

pfxファイルは以下のようにして作成できる。

> openssl pkcs12 -export -inkey OreOrePrivate.key -in OreOreCertificate.cer -out OreOreCertificate.pfx

Windowsマシンの場合,作成されたpfxファイルを用いたり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。

Page Top

Microsoftのコマンドを使用して自己電子証明書を作成する anchor.png

Microsoftのコマンドを使用して作成する場合は,以下の手順で作成する。

  • 自己電子証明書と秘密鍵を作成する。
    これは,makecertコマンドを使用する。
  • 自己電子証明書と秘密鍵を使って個人情報交換(PFX)ファイルに変換する。
    これは,pvk2pfxコマンドを使用する。
Page Top

自己電子証明書と秘密鍵を作成する anchor.png

makecertコマンドを使用して,独自の電子証明書と秘密鍵を作成する。

makecertコマンドの使い方は,以下の様になっている。作成する電子証明書ファイル名(拡張子はcer)を指定する。

> makecert -r -sv <name-of-private-key-file>.pvk -n "CN=<developer-name>" <name-of-certificate-file>.cer -b <start-data> -e <end-date>
-aオプション
署名に使用するダイジェストアルゴリズムを指定する。
md5, sha1(デフォルト), sha256, sha512が指定できる。
古いバージョンのmakecertだと,sha256やsha512は使えない。
-rオプション
自己署名ルート証明書を作成したい場合指定する。
-svオプション
作成する秘密鍵ファイル名(拡張子pvk)を指定する。
-nオプション
証明書の名前を指定する。
名前はX.509に準拠する必要がある。簡単にする場合"CN=MyName"を使用する。
CN=コモン名,O=組織の名前,C=国
例:-n "CN=MyName,O=MyAddress,C=JP"
-ssオプション
作成された電子証明書が登録されるする証明書ストアの名前を指定する。
-peオプション
秘密鍵をエクスポート可能にする。
電子証明書に秘密鍵組み込む時に指定する。証明書ストアに登録してデジタル署名をする場合には必要。
-equオプション
証明書の拡張キーを設定する。
コード署名: "1.3.6.1.5.5.7.3.3"
ライフタイム署名: "1.3.6.1.4.1.311.10.3.13"
コード署名とライフタイム署名の両方: "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13"
-bオプション
証明書の有効期限の開始日を指定する。
形式は,mm/dd/yyyyになっている。指定しない場合は,作成日になる。
-eオプション
証明書の有効期限の終了日を指定する。
形式は,mm/dd/yyyyになっている。指定しない場合は,デフォルト終了日:2039/12/31になる。

以下のようにして自己電子証明書と秘密鍵を作成した。

> makecert -r -sv OreOreCertificate.pvk -n "CN=OreOre CA" OreOreCertificate.cer -b 05/01/2016 -e 04/30/2100

コマンド実行すると秘密鍵を暗号化する時に使用するパスワードを聞かれるので,パスワードを入力する。
その後,確認のためパスワードを再度入力する。

うまくいくと,自己電子証明書OreOreCertificate.cerと秘密鍵OreOreCertificate.pvkが作成される。

Page Top

pfxファイルを作成する anchor.png

pvk2pfxコマンド使用して,自己電子証明書と秘密鍵を合成してpfx(個人情報交換)ファイルを作成する。
この変換する時に,秘密鍵OreOreCertificate.pvkと自己電子証明書OreOreCertificate.cer,秘密鍵を暗号化した時のパスワードが必要となる。

コマンドの使い方は以下のようになっている。

> pvk2pfx -pvk <name-of-private-key-file>.pvk -pi <password-for-pvk> -spc <name-of-certification-file-name>.cer -pfx <name-of-pfx-file> -po <password-for-pfx>
-pvkオプション
秘密鍵ファイル名(拡張子pvk)を指定する。
-piオプション
秘密鍵のパスワードを指定する。
-spcオプション
電子証明書ファイルを指定する。
-pfxオプション
出力するpfxファイル名を指定する。
-poオプション
pfxファイルのパスワードを指定する。

以下のようにしてpfxファイルに変換した。

> pvk2pfx -pvk OreOreCertificate.pvk -pi xxxxxxxxxxx -spc OreOreCertificate.cer -pfx OreOreCertificate.pfx -po xxxxxxxxxx -f

うまくいけばOreOreCertificate.pfxファイルが作成されている。

Windowsマシンの場合,作成された.pfxファイルを直接利用したり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。

Page Top

Windowsの証明書ストアに電子証明書を登録する anchor.png

pfxファイルが作成できたら,そのファイルを使って電子証明書をWindowsの証明書ストアに登録する。

証明書ストアに登録する理由は,アプリケーション等にデジタル署名を追加する場合,Windowsでは電子証明書を参照するデフォルト場所として証明書ストアを使用しているから。

また,署名用証明書を証明書ストア登録しておくと,デジタル署名を検証する場合にも使用される。

証明書ストアに電子証明書を登録するには,証明書マネージャ(CertMgr.msc)を使用するか,certutilsコマンドで行う。

証明書マネージャ(CertMgr.msc)で登録する場合は以下のようにする。

  • Windows + Qキーを押し,CertMgr.mscと入力し見つかったらダブルクリックでCertMgr.mscを起動する。
    「個人」を右クリックし,すべてのタスク>インポートを選択する。
    もしくは,pfxファイルをダブルクリックする。
  • 証明書の読み込みウィザードの指示に従って操作を実行する。次へをクリック。
  • 読み込むファイルを聞かれるので,登録したいpfxファイルを選択する。
  • パスワードを入力する。
    「すべての拡張プロパティを含める」がオンになっていることを確認する。
  • 「証明書をすべて次のストアに配置する」オプションを選択し,次へをクリックする。
  • 「個人」を選択する。
  • 新しい秘密署名キーを読み込むためのダイアログが表示された場合,OKをクリックする。

同様にして,署名用証明書cerファイルを証明書ストアに登録する。

  • Windows + Qキーを押し,CertMgr.mscと入力し見つかったらダブルクリックでCertMgr.mscを起動する。
    「信頼されたルート証明機関」を右クリックし,すべてのタスク>インポートを選択する。
    もしくは,cerファイルをダブルクリックする。
  • 証明書の読み込みウィザードの指示に従って操作を実行する。次へをクリック。
  • 読み込むファイルを聞かれるので,登録したいcerファイルを選択する。
  • 「信頼されたルート証明機関」を選択する。
  • OKをクリックする。

これで作成した自己電子証明書を証明書ストアの「個人」へ,署名証明書を「信頼されたルート証明機関」に登録された。

Page Top

自己電子証明書で実行ファイルにデジタル署名する anchor.png

実行ファイルに自己証明書を使って,Windowsの実行ファイルにデジタル署名を追加してみる。
ここでは,Microsoftのsigntoolコマンドを使用してみる。

コマンドの使い方は以下のようになっている。

> signtool -fd sha256 -f <name-of-pfx-file>.pvk -p <password-for-pfx> -t <timestamp-server> execute-command
-fdオプション
ファイル署名に使用するアルゴリズムを指定する。
-fオプション
pfxファイルを指定する。
-pオプション
pfxファイルのパスワードを指定する。
-tオプション
タイムスタンプサーバーのURLを指定する。

以下のようにしてさsample.exeにデジタル署名してみた。

> signtool sign -fd sha256 -f OreOreCertificate.pfx /p xxxxxxxxxxx /t http://timestamp.digicert.com sample.exe
Page Top

自己電子証明書でPDFファイルにデジタル署名する anchor.png

証明書ストア(個人)に登録した自己電子証明書を使って,PDFファイルにデジタル署名を追加してみる。

Adobe Acrobat Reader(無料版)を使って,PDFファイルにデジタル署名をする場合は以下のようにする。

  • 署名したいPDFファイルをAdcrobat Readerで開く。
  • すべてのツールから「証明書を使用」をクリックする。
  • デジタル署名をクリックし,署名をしたい場所をドラッグする。
  • 署名に使う証明書の選択画面が表示されるので,作成した自己電子証明書をマークをして続行をクリックする。
  • 署名のデザインを指定できるので好みのものを選択する。
  • 署名ボタンをクリックする。
  • 保存するPDFファイル名を指定すれば,署名したPDFファイルが作成される。

これでPDFファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。

他のアプリケーションでも同様にしてデジタル署名をすることが出来る。

Adobe Acrobat Reader(無料版)だとPDFファイルにデジタル署名する場合制限があるので,他のPDFビューワー等を使ったほうが良い。

Page Top

電子証明書をエクスポートして署名した文書と一緒に配布する anchor.png

自己電子証明書を使ってデジタル署名したPDF文書ファイルを相手に渡す時に,そのデジタル署名を検証する目的で自己署名証明書を同時に渡す必要がある。

この自己署名証明書としては自己電子証明書を作成した時に作成された署名用証明書OreOreCertificate.cerをそのまま使用できる。
また証明書ストアに登録してある秘密鍵付の自己電子証明書から,自己署名証明書を作成することも出来る。

証明書ストアからエクスポートして自己署名証明書を作成する場合は以下のようにする。

  • certmgr.mscを起動して,証明書ストアの「個人」の該当する自己電子証明書を開く。
  • 詳細タブのファイルにコピーをクリックする。
    証明書のエクスポートウィザードの開始が表示されるので,次へをクリックする。
  • 秘密鍵はエクスポートしないので,「いいえ」にマークして次へをクリックする。
  • DER...にマークして,次へをクリックする。
  • 保存するファイル名を入力して,次へをクリックする。
  • 完了で検証用の自己署名証明書が作成される。

作成したデジタル署名を検証するための自己署名証明書を,PDF文書ファイルと一緒に相手に渡す。

これらを受け取った側では,自己署名証明書を証明書ストアの信頼済みのルート証明書に登録することで,PDF文書ファイルのデジタル署名の検証が行えるようになる。

当たり前ではあるが,自己電子証明書(オレオレ電子証明書)を使ったデジタル署名なので,検証できたからといって信頼性が高いわけではないのだが・・・

お金をかけないで信頼性が高いデジタル署名をするには,マイナンバーカードの署名用電子証明書と秘密鍵を使ってデジタル署名をするのが良いと思う。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 47, today: 1, yesterday: 0
最終更新: 2024-03-20 (水) 14:13:40 (JST) (38d) by yuji