一般的には電子証明書は以下の手順で作成する。
第3者認証機関にCSRを提出し公的な認証を受ける場合,お金がかなりかかる。
なので,テスト目的や社内で使用するために,デジタル署名をする時に使用する独自の自己電子証明書をWindowsマシンで作成してみる。
OpenSSLはハッシュ・共通鍵暗号・公開鍵暗号・署名などに関する機能を集約したソフトウェア。
秘密鍵,公開鍵,サーバ証明書,クライアント証明書なんかを作成する時に使用できる。
OpenSSLはここからインストーラーをダウンロードし,ダブルクリックでインストールできる。
MSYS2/MinGW-w64環境があれば,パッケージ管理ツールpacmanでインストールできる。
$ pacman -S mingw-w64-x86_64-openssl mingw-w64-i686-openssl
opensslの主なオプション。
オプション | 説明 |
version | バージョンを表示。 |
rand | ランダムデータを作成する。 |
enc | エンコードする。 |
genrsa | RSA秘密鍵を作成。 |
rsa | RSA秘密鍵関連の処理をする。 |
req | 証明書署名要求および証明書作成。 |
-new | 新しく証明書署名要求を作成する。-keyにて指定した秘密鍵を利用して公開鍵を作成する。 |
-x509 | 証明書署名要求ではなく自己署名証明書を出力する。 |
-in | 入力ファイル名を指定する。 |
-out | 出力ファイル名を指定する。 |
-pubin | 公開鍵を入力。 |
-pubout | 公開鍵を出力。 |
-sha512 | 証明書のメッセージダイジェストを作成する時にsha512アルゴリズムを指定する。 |
-aes256 | AES256で暗号化する。 |
-binary | バイナリで出力する。 |
-text | テキストで出力する。 |
-base64 | BASE64で出力する。 |
-hex | 16進数で出力する。 |
-noout | 末尾にPEM(-----BEGIN...)を出力しない。 |
opensslでファイルの拡張子。
拡張子 | 説明 |
.pem | PEM形式(-----BEGIN ...)。中身は秘密鍵だったり公開鍵だったり電子証明書だったりする。 Base64でエンコードしたテキストファイル。 |
.key | 鍵ファイル。秘密鍵や公開鍵。 ファイルはpemと同じ形式。 |
.pub | 鍵ファイル。公開鍵。 ファイルはpemと同じ形式。 |
.csr | 証明書署名要求(Certificate Signing Request) RFC2986(PKCS #10)で定められているものをBase64でエンコードしたテキストファイル。 |
.crt, .cer | 電子証明書(Certificate) ファイルはpemと同じ形式。 |
.der | X.509形式の電子証明書や秘密鍵をバイナリ形式で保存する。 |
.ppk | PuTTYが扱う鍵ファイル形式。 |
秘密鍵は公開鍵方式のRSAで鍵長を2048bitでパスフレーズ無しで作成する。
以下のようにopensslコマンドを使って作成する。
> openssl genrsa 2048 > OreOrePrivate.key
作成した秘密鍵で署名した自己電子証明書を作成する。
> openssl req -new -x509 -days 3650 -key OreOrePrivate.key -sha512 -out OreOreCertificate.cer
-daysオプションで10年間有効な自己電子証明書にしている。-sha512オプションで署名アルゴリズムをsha512に指定している。
作成した自己電子証明書には,署名と公開鍵が含まれている。
秘密鍵と自己電子証明書(公開鍵と署名)から,pfxファイル(個人情報交換ファイル)を作成する。
pfxファイルは秘密鍵と対応するX.509形式の電子証明書(公開鍵と署名)をセットにしたファイルで,Microsoft製品で電子証明書の登録時やデジタル署名をする時なんかによく使われているファイル形式。
pfxファイルは以下のようにして作成できる。
> openssl pkcs12 -export -inkey OreOrePrivate.key -in OreOreCertificate.cer -out OreOreCertificate.pfx
Windowsマシンの場合,作成されたpfxファイルを用いたり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。
Microsoftのコマンドを使用して作成する場合は,以下の手順で作成する。
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>
以下のようにして自己電子証明書と秘密鍵を作成した。
> makecert -r -sv OreOreCertificate.pvk -n "CN=OreOre CA" OreOreCertificate.cer -b 05/01/2016 -e 04/30/2100
コマンド実行すると秘密鍵を暗号化する時に使用するパスワードを聞かれるので,パスワードを入力する。
その後,確認のためパスワードを再度入力する。
うまくいくと,自己電子証明書OreOreCertificate.cerと秘密鍵OreOreCertificate.pvkが作成される。
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>
以下のようにしてpfxファイルに変換した。
> pvk2pfx -pvk OreOreCertificate.pvk -pi xxxxxxxxxxx -spc OreOreCertificate.cer -pfx OreOreCertificate.pfx -po xxxxxxxxxx -f
うまくいけばOreOreCertificate.pfxファイルが作成されている。
Windowsマシンの場合,作成された.pfxファイルを直接利用したり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。
pfxファイルが作成できたら,そのファイルを使って電子証明書をWindowsの証明書ストアに登録する。
証明書ストアに登録する理由は,アプリケーション等にデジタル署名を追加する場合,Windowsでは電子証明書を参照するデフォルト場所として証明書ストアを使用しているから。
また,署名用証明書を証明書ストア登録しておくと,デジタル署名を検証する場合にも使用される。
証明書ストアに電子証明書を登録するには,証明書マネージャ(CertMgr.msc)を使用するか,certutilsコマンドで行う。
証明書マネージャ(CertMgr.msc)で登録する場合は以下のようにする。
同様にして,署名用証明書cerファイルを証明書ストアに登録する。
これで作成した自己電子証明書を証明書ストアの「個人」へ,署名証明書を「信頼されたルート証明機関」に登録された。
実行ファイルに自己証明書を使って,Windowsの実行ファイルにデジタル署名を追加してみる。
ここでは,Microsoftのsigntoolコマンドを使用してみる。
コマンドの使い方は以下のようになっている。
> signtool -fd sha256 -f <name-of-pfx-file>.pvk -p <password-for-pfx> -t <timestamp-server> execute-command
以下のようにしてさsample.exeにデジタル署名してみた。
> signtool sign -fd sha256 -f OreOreCertificate.pfx /p xxxxxxxxxxx /t http://timestamp.digicert.com sample.exe
証明書ストア(個人)に登録した自己電子証明書を使って,PDFファイルにデジタル署名を追加してみる。
Adobe Acrobat Reader(無料版)を使って,PDFファイルにデジタル署名をする場合は以下のようにする。
これでPDFファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。
他のアプリケーションでも同様にしてデジタル署名をすることが出来る。
Adobe Acrobat Reader(無料版)だとPDFファイルにデジタル署名する場合制限があるので,他のPDFビューワー等を使ったほうが良い。
自己電子証明書を使ってデジタル署名したPDF文書ファイルを相手に渡す時に,そのデジタル署名を検証する目的で自己署名証明書を同時に渡す必要がある。
この自己署名証明書としては自己電子証明書を作成した時に作成された署名用証明書OreOreCertificate.cerをそのまま使用できる。
また証明書ストアに登録してある秘密鍵付の自己電子証明書から,自己署名証明書を作成することも出来る。
証明書ストアからエクスポートして自己署名証明書を作成する場合は以下のようにする。
作成したデジタル署名を検証するための自己署名証明書を,PDF文書ファイルと一緒に相手に渡す。
これらを受け取った側では,自己署名証明書を証明書ストアの信頼済みのルート証明書に登録することで,PDF文書ファイルのデジタル署名の検証が行えるようになる。
当たり前ではあるが,自己電子証明書(オレオレ電子証明書)を使ったデジタル署名なので,検証できたからといって信頼性が高いわけではないのだが・・・
お金をかけないで信頼性が高いデジタル署名をするには,マイナンバーカードの署名用電子証明書と秘密鍵を使ってデジタル署名をするのが良いと思う。
新しくコメントをつける