|
1: 2024-03-06 (水) 14:48:45 yuji |
| + | * オレオレ電子証明書の作成 [#v9a0277c] |
| + | 一般的には電子証明書は以下の手順で作成する。~ |
| + | - 秘密鍵を作成する。~ |
| + | - 作成した秘密鍵に対する公開鍵を作成する。~ |
| + | - 署名要求証明書(CSR)を作成する。~ |
| + | 中身は公開鍵と会社情報や連絡先等の情報。~ |
| + | - CSRを''第3者認証機関''に提出し,認証機関の秘密鍵で署名する。~ |
| + | CSRの中身をハッシュ化し,ハッシュ値に対して秘密鍵で署名する。~ |
| + | - 作成された証明書を受け取り,サーバに保管して利用する。~ |
| | | |
| + | 第3者認証機関にCSRを提出し公的な認証を受ける場合,お金がかなりかかる。 |
| + | |
| + | なので,テスト目的や社内で使用するために,デジタル署名をする時に使用する独自の自己電子証明書をWindowsマシンで作成してみる。~ |
| + | |
| + | * opensslコマンドで自己電子証明書を作成する [#w5c92c0d] |
| + | OpenSSLはハッシュ・共通鍵暗号・公開鍵暗号・署名などに関する機能を集約したソフトウェア。~ |
| + | 秘密鍵,公開鍵,サーバ証明書,クライアント証明書なんかを作成する時に使用できる。~ |
| + | |
| + | OpenSSLは[[ここから>https://slproweb.com/products/Win32OpenSSL.html]]インストーラーをダウンロードし,ダブルクリックでインストールできる。~ |
| + | [[MSYS2/MinGW-w64>/開発/toolchain/MinGW#xde2a8b1]]環境があれば,パッケージ管理ツールpacmanでインストールできる。~ |
| + | $ pacman -S mingw-w64-x86_64-openssl mingw-w64-i686-openssl |
| + | |
| + | opensslの主なオプション。~ |
| + | |オプション |説明 |h |
| + | |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でファイルの拡張子。~ |
| + | |拡張子 |説明 |h |
| + | |.pem |PEM形式(-----BEGIN ...)。中身は秘密鍵だったり公開鍵だったり電子証明書だったりする。&br;Base64でエンコードしたテキストファイル。| |
| + | |.key |鍵ファイル。秘密鍵や公開鍵。&br;ファイルはpemと同じ形式。 | |
| + | |.pub |鍵ファイル。公開鍵。&br;ファイルはpemと同じ形式。 | |
| + | |.csr |証明書署名要求(Certificate Signing Request)&br;RFC2986(PKCS #10)で定められているものをBase64でエンコードしたテキストファイル。 | |
| + | |.crt, .cer |電子証明書(Certificate)&br;ファイルはpemと同じ形式。 | |
| + | |.der |X.509形式の電子証明書や秘密鍵をバイナリ形式で保存する。 | |
| + | |.ppk |PuTTYが扱う鍵ファイル形式。 | |
| + | |
| + | |
| + | ** 秘密鍵の生成 [#w2b6c1d3] |
| + | 秘密鍵は公開鍵方式のRSAで鍵長を2048bitでパスフレーズ無しで作成する。~ |
| + | 以下のようにopensslコマンドを使って作成する。~ |
| + | > openssl genrsa 2048 > OreOrePrivate.key |
| + | |
| + | ** 自己電子証明書の生成 [#v31bdd80] |
| + | 作成した秘密鍵で署名した自己電子証明書を作成する。~ |
| + | > openssl req -new -x509 -days 3650 -key OreOrePrivate.key -sha512 -out OreOreCertificate.cer |
| + | -daysオプションで10年間有効な自己電子証明書にしている。-sha512オプションで署名アルゴリズムをsha512に指定している。~ |
| + | 作成した自己電子証明書には,署名と公開鍵が含まれている。~ |
| + | |
| + | *** 自己電子証明書を確認 [#u656aaf3] |
| + | 作成した自己電子証明書の中身を確認してみる。~ |
| + | > openssl x509 -in OreOreCertificate.cer -text -noout |
| + | |
| + | ** pfxファイルを作成する [#x839bf81] |
| + | 秘密鍵と自己電子証明書(公開鍵と署名)から,''pfxファイル(個人情報交換ファイル)''を作成する。~ |
| + | pfxファイルは,秘密鍵と対応するX.509形式の電子証明書をセットにしたファイルで,Microsoft製品で電子証明書の登録時によく使われているファイル形式。~ |
| + | |
| + | .pfxファイルは以下のようにして作成できる。~ |
| + | > openssl pkcs12 -export -inkey OreOrePrivate.key -in OreOreCertificate.cer -out OreOreCertificate.pfx |
| + | |
| + | Windowsマシンの場合,作成された.pfxファイルを用いたり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。~ |
| + | |
| + | * Microsoftのコマンドを使用して自己電子証明書を作成する [#h51d8c2a] |
| + | Microsoftのコマンドを使用して作成する場合は,以下の手順で作成する。~ |
| + | - 自己電子証明書と秘密鍵を作成する。~ |
| + | これは,makecertコマンドを使用する。~ |
| + | - 電子証明書と秘密鍵を使って個人情報交換(PFX)ファイルに変換する。~ |
| + | これは,pvk2pfxコマンドを使用する。~ |
| + | |
| + | ** 自己電子証明書と秘密鍵を作成する [#de102527] |
| + | 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> |
| + | |
| + | :-rオプション|自己署名ルート証明書を作成したい場合指定する。~ |
| + | :-svオプション|作成する秘密鍵ファイル名(拡張子pvk)を指定する。~ |
| + | :-nオプション|証明書の名前を指定する。~ |
| + | 名前はX.509に準拠する必要がある。簡単にする場合"CN=MyName"を使用する。~ |
| + | :-ssオプション|証明書ストア名を指定する。~ |
| + | 作成された証明書を保存する証明書ストアの名前を指定する。~ |
| + | :-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''が作成される。~ |
| + | |
| + | ** pfxファイルを作成する [#ladf2460] |
| + | 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ファイルを直接利用したり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。~ |
| + | |
| + | * Windowsの証明書ストアに電子証明書を登録する [#ifddd68f] |
| + | ''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をクリックする。~ |
| + | |
| + | これで作成した自己電子証明書を証明書ストアの「個人」へ,署名証明書を「信頼されたルート証明機関」に登録された。~ |
| + | |
| + | * 自己電子証明書でPDFファイルにデジタル署名する [#n419b266] |
| + | 証明書ストア(個人)に登録した自己電子証明書を使って,PDFファイルにデジタル署名を追加してみる。~ |
| + | |
| + | Adobe Acrobat Reader(無料版)を使って,PDFファイルにデジタル署名をする場合は以下のようにする。~ |
| + | - 署名したいPDFファイルをAdcrobat Readerで開く。~ |
| + | - すべてのツールから「証明書を使用」をクリックする。~ |
| + | - デジタル署名をクリックし,署名をしたい場所をドラッグする。~ |
| + | - 署名に使う証明書の選択画面が表示されるので,作成した自己電子証明書をマークをして続行をクリックする。~ |
| + | - 署名のデザインを指定できるので好みのものを選択する。~ |
| + | - 署名ボタンをクリックする。~ |
| + | - 保存するPDFファイル名を指定すれば,署名したPDFファイルが作成される。~ |
| + | |
| + | これでPDFファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。~ |
| + | |
| + | 他のアプリケーションでも同様にしてデジタル署名をすることが出来る。 |
| + | |
| + | Adobe Acrobat Reader(無料版)だとPDFファイルにデジタル署名する場合制限があるので,他のPDFビューワー等を使ったほうが良い。~ |
| + | |
| + | * 電子証明書をエクスポートして署名した文書と一緒に配布する [#l11089ab] |
| + | 自己電子証明書を使ってデジタル署名したPDF文書を相手に渡す時には,そのデジタル署名を検証するときには自己署名証明書を一緒に渡す必要がある。~ |
| + | |
| + | この自己署名証明書としては自己電子証明書を作成した時に作成された署名用証明書''OreOreCertificate.cer''をそのまま使用できる。~ |
| + | また証明書ストアに登録してある秘密鍵付の自己電子証明書から,自己署名証明書を作成することも出来る。~ |
| + | |
| + | 証明書ストアからエクスポートして自己署名証明書を作成する場合は以下のようにする。~ |
| + | - ''certmgr.msc''を起動して,証明書ストアの「個人」の該当する自己電子証明書を開く。~ |
| + | - 詳細タブのファイルにコピーをクリックする。~ |
| + | 証明書のエクスポートウィザードの開始が表示されるので,次へをクリックする。~ |
| + | - 秘密鍵はエクスポートしないので,「いいえ」にマークして次へをクリックする。~ |
| + | - DER...にマークして,次へをクリックする。~ |
| + | - 保存するファイル名を入力して,次へをクリックする。~ |
| + | - 完了で検証用の自己署名証明書が作成される。~ |
| + | |
| + | 作成したデジタル署名を検証するための自己署名証明書を,PDF文書ファイルと一緒に相手に渡す。 |
| + | |
| + | これらを受け取った側では,自己署名証明書を証明書ストアの''信頼済みのルート証明書''に登録することで,PDF文書ファイルのデジタル署名の検証が行えるようになる。~ |
| + | |
| + | 当たり前ではあるが,自己電子証明書(オレオレ電子証明書)を使ったデジタル署名なので,検証できたからといって信頼性が高いわけではないのだが・・・ |
| + | |
| + | お金をかけないで信頼性が高いデジタル署名をするには,[[マイナンバーカードの署名用電子証明書と秘密鍵を使ってデジタル署名をする>../マイナンバーカードを使ってデジタル署名]]のが良いと思う。~ |