1: 2024-03-06 (水) 14:48:45 yuji ソース 現: 2024-03-20 (水) 14:13:40 yuji ソース
Line 1: Line 1:
* オレオレ電子証明書の作成 [#v9a0277c] * オレオレ電子証明書の作成 [#v9a0277c]
-一般的には電子証明書は以下の手順で作成する。+一般的には電子証明書(X.509)は以下の手順で作成する。
-- 秘密鍵を作成する。~+- ''秘密鍵''を作成する。~
- 作成した秘密鍵に対する公開鍵を作成する。~ - 作成した秘密鍵に対する公開鍵を作成する。~
-- 署名要求証明書(CSR)を作成する。+- ''第3者認証機関''に申請する署名要求証明書(CSR)を作成する。
-中身は公開鍵と会社情報や連絡先等の情報。+第3者認証機関で有効な電子証明書を発行してもらうため,署名要求証明書(CSR)を用意する。~ 
-- CSRを''第3者認証機関''に提出し,認証機関の秘密鍵で署名する。+中身は上記で作成した公開鍵と個人(会社)情報や連絡先等の情報などの認証情報を含んだもの。~ 
-CSRの中身をハッシュ化し,ハッシュ値に対して秘密鍵で署名する。~ +- 作成した署名要求証明書(CSR)を第3者認証機関に提出する。~ 
-- 作成された証明書を受け取り,サーバに保管して利用する。~+署名要求証明書(CSR)を第3者認証機関に提出し,認証機関で電子証明書(X.509)を発行してもらう。~ 
 +認証機関では申請者を確認し,署名要求証明書(CSR)の中身をハッシュ化し,ハッシュ値に対して認証機関の秘密鍵でデジタル署名した電子証明書を作成する。
 +- 作成された''電子証明書(X.509)''を受け取り,コンピュータに保管して利用する。
 +この電子証明書(X.509)を使ってデジタル署名をすることができる。~
-第3者認証機関にCSRを提出し公的な認証を受ける場合,お金がかなりかかる。+第3者認証機関にCSRを提出し公的な認証を受ける(電子証明書を発行してもらう)場合,お金がかなりかかる。
-なので,テスト目的や社内で使用するために,デジタル署名をする時に使用する独自の自己電子証明書をWindowsマシンで作成してみる。~+なので,テスト使用や個人的なやり取りや社内で使用するだけなどの目的で,デジタル署名をする時に使用する独自の自己電子証明書(X.509)を,勝手に作成してみた。~ 
 + 
 +もちろんこの勝手に作る電子証明書は,第3者認証機関での身分保証はないので,公的には使用できない。~
* opensslコマンドで自己電子証明書を作成する [#w5c92c0d] * opensslコマンドで自己電子証明書を作成する [#w5c92c0d]
OpenSSLはハッシュ・共通鍵暗号・公開鍵暗号・署名などに関する機能を集約したソフトウェア。~ OpenSSLはハッシュ・共通鍵暗号・公開鍵暗号・署名などに関する機能を集約したソフトウェア。~
-秘密鍵,公開鍵,サーバ証明書,クライアント証明書なんかを作成する時に使用できる。~+秘密鍵,公開鍵,サーバ電子証明書,クライアント電子証明書なんかを作成する時に使用できる。~ 
 + 
 +OpenSSLは[[ここから>https://slproweb.com/products/Win32OpenSSL.html]]Windows版インストーラーをダウンロードし,ダブルクリックでインストールできる。~
-OpenSSLは[[ここから>https://slproweb.com/products/Win32OpenSSL.html]]インストーラーをダウンロードし,ダブルクリックでインストールできる。~ 
[[MSYS2/MinGW-w64>/開発/toolchain/MinGW#xde2a8b1]]環境があれば,パッケージ管理ツールpacmanでインストールできる。~ [[MSYS2/MinGW-w64>/開発/toolchain/MinGW#xde2a8b1]]環境があれば,パッケージ管理ツールpacmanでインストールできる。~
 $ pacman -S mingw-w64-x86_64-openssl mingw-w64-i686-openssl  $ pacman -S mingw-w64-x86_64-openssl mingw-w64-i686-openssl
Line 43: Line 49:
|-noout    |末尾にPEM(-----BEGIN...)を出力しない。                                          | |-noout    |末尾にPEM(-----BEGIN...)を出力しない。                                          |
-opensslでファイルの拡張子。~+opensslで扱うファイルの拡張子。~
|拡張子    |説明                                                                              |h |拡張子    |説明                                                                              |h
-|.pem      |PEM形式(-----BEGIN ...)。中身は秘密鍵だったり公開鍵だったり電子証明書だったりする。&br;Base64でエンコードしたテキストファイル。| +|.pem      |PEM形式。-----BEGIN ...のファイル。&br;中身は秘密鍵だったり公開鍵だったり電子証明書だったりする。&br;Base64でエンコードしたテキストファイル。| 
-|.key      |鍵ファイル。秘密鍵や公開鍵。&br;ファイルはpemと同じ形式。 | +|.key      |鍵ファイルで,秘密鍵や公開鍵。&br;ファイルはpemと同じ形式。 | 
-|.pub      |鍵ファイル。公開鍵。&br;ファイルはpemと同じ形式。        |+|.pub      |鍵ファイルで,公開鍵。&br;ファイルはpemと同じ形式。        |
|.csr      |証明書署名要求(Certificate Signing Request)&br;RFC2986(PKCS #10)で定められているものをBase64でエンコードしたテキストファイル。                      | |.csr      |証明書署名要求(Certificate Signing Request)&br;RFC2986(PKCS #10)で定められているものをBase64でエンコードしたテキストファイル。                      |
|.crt, .cer |電子証明書(Certificate)&br;ファイルはpemと同じ形式。    | |.crt, .cer |電子証明書(Certificate)&br;ファイルはpemと同じ形式。    |
-|.der      |X.509形式の電子証明書や秘密鍵をバイナリ形式で保存する。  |+|.der      |[[X.509>https://ja.wikipedia.org/wiki/X.509]]形式の電子証明書や秘密鍵をバイナリ形式で保存したファイル形式。 |
|.ppk      |PuTTYが扱う鍵ファイル形式。                              | |.ppk      |PuTTYが扱う鍵ファイル形式。                              |
Line 56: Line 62:
** 秘密鍵の生成 [#w2b6c1d3] ** 秘密鍵の生成 [#w2b6c1d3]
秘密鍵は公開鍵方式のRSAで鍵長を2048bitでパスフレーズ無しで作成する。~ 秘密鍵は公開鍵方式のRSAで鍵長を2048bitでパスフレーズ無しで作成する。~
-以下のようにopensslコマンドを使って作成する。~+以下のようにopensslコマンドを使って作成出来る。~
 > openssl genrsa 2048 > OreOrePrivate.key  > openssl genrsa 2048 > OreOrePrivate.key
** 自己電子証明書の生成 [#v31bdd80] ** 自己電子証明書の生成 [#v31bdd80]
-作成した秘密鍵で署名した自己電子証明書を作成する。~+作成した秘密鍵で署名した自己電子証明書(X.509)を作成する。~
 > openssl req -new -x509 -days 3650 -key OreOrePrivate.key -sha512 -out OreOreCertificate.cer  > openssl req -new -x509 -days 3650 -key OreOrePrivate.key -sha512 -out OreOreCertificate.cer
--daysオプションで10年間有効な自己電子証明書にしている。-sha512オプションで署名アルゴリズムをsha512に指定している。+''-days''オプションで10年間有効な自己電子証明書にしている。
-作成した自己電子証明書には,署名と公開鍵が含まれている。~+''-sha512''オプションで署名アルゴリズムをsha512に指定している。~ 
 + 
 +国,県,場所,会社名,部署名,名前,メールアドレスなどを入力する。~ 
 + 
 +作成した自己電子証明書OreOreCertificate.cerには,デジタル署名と公開鍵が含まれている。~
*** 自己電子証明書を確認 [#u656aaf3] *** 自己電子証明書を確認 [#u656aaf3]
Line 70: Line 80:
** pfxファイルを作成する [#x839bf81] ** pfxファイルを作成する [#x839bf81]
-秘密鍵と自己電子証明書(公開鍵と署名)から,''pfxファイル(個人情報交換ファイル)''を作成する。~ +秘密鍵と自己電子証明書(署名と公開鍵)から,''pfxファイル(個人情報交換ファイル)''を作成する。~ 
-pfxファイルは,秘密鍵と対応するX.509形式の電子証明書をセットにしたファイルで,Microsoft製品で電子証明書の登録時によく使われているファイル形式。~+pfxファイルは秘密鍵と対応するX.509形式の電子証明書(公開鍵とデジタル署名)をセットにしたファイルで,Microsoft製品で電子証明書の登録時やデジタル署名をする時なんかによく使われているファイル形式。~
-.pfxファイルは以下のようにして作成できる。~+pfxファイルは以下のようにして作成できる。~
 > openssl pkcs12 -export -inkey OreOrePrivate.key -in OreOreCertificate.cer -out OreOreCertificate.pfx  > openssl pkcs12 -export -inkey OreOrePrivate.key -in OreOreCertificate.cer -out OreOreCertificate.pfx
-Windowsマシンの場合,作成された.pfxファイルを用いたり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。~+Windowsマシンの場合,作成されたpfxファイルを用いたり,証明書ストアに登録したりして,アプリケーション等にデジタル署名を追加することが出来るようになる。~
* Microsoftのコマンドを使用して自己電子証明書を作成する [#h51d8c2a] * Microsoftのコマンドを使用して自己電子証明書を作成する [#h51d8c2a]
-Microsoftのコマンドを使用して作成する場合は,以下の手順で作成する。~+Microsoftのコマンドを使用して自己電子証明書(X.509)を作成出来る。以下の手順で作成する。~
- 自己電子証明書と秘密鍵を作成する。~ - 自己電子証明書と秘密鍵を作成する。~
これは,makecertコマンドを使用する。~ これは,makecertコマンドを使用する。~
-- 電子証明書と秘密鍵を使って個人情報交換(PFX)ファイルに変換する。~+- 自己電子証明書と秘密鍵を使って個人情報交換(PFX)ファイルに変換する。~
これは,pvk2pfxコマンドを使用する。~ これは,pvk2pfxコマンドを使用する。~
** 自己電子証明書と秘密鍵を作成する [#de102527] ** 自己電子証明書と秘密鍵を作成する [#de102527]
-makecertコマンドを使用して,独自の電子証明書と秘密鍵を作成する。~+makecertコマンドを使用して,独自の自己電子証明書と秘密鍵を作成する。~
-コマンドの使い方は以下の様になっている。作成する証明書ファイル名(拡張子はcer)を指定する。~+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 <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オプション|自己署名ルート証明書を作成したい場合指定する。~ :-rオプション|自己署名ルート証明書を作成したい場合指定する。~
:-svオプション|作成する秘密鍵ファイル名(拡張子pvk)を指定する。~ :-svオプション|作成する秘密鍵ファイル名(拡張子pvk)を指定する。~
:-nオプション|証明書の名前を指定する。~ :-nオプション|証明書の名前を指定する。~
名前はX.509に準拠する必要がある。簡単にする場合"CN=MyName"を使用する。~ 名前はX.509に準拠する必要がある。簡単にする場合"CN=MyName"を使用する。~
-:-ssオプション|証明書ストア名を指定する。+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オプション|証明書の有効期限の開始日を指定する。~ :-bオプション|証明書の有効期限の開始日を指定する。~
-形式は,mm/dd/yyyyになっている。~ +形式は,mm/dd/yyyyになっている。指定しない場合は,作成日になる。~
-指定しない場合は作成日になる。~+
:-eオプション|証明書の有効期限の終了日を指定する。~ :-eオプション|証明書の有効期限の終了日を指定する。~
-形式は,mm/dd/yyyyになっている。 +形式は,mm/dd/yyyyになっている。指定しない場合は,デフォルト終了日:2039/12/31になる。~
-指定しない場合は,デフォルト終了日は2039/12/31になる。~+
以下のようにして自己電子証明書と秘密鍵を作成した。~ 以下のようにして自己電子証明書と秘密鍵を作成した。~
Line 113: Line 131:
** pfxファイルを作成する [#ladf2460] ** pfxファイルを作成する [#ladf2460]
-pvk2pfxコマンド使用して,自己電子証明書と秘密鍵を合成して.pfx(個人情報交換)ファイルを作成する。+pvk2pfxコマンド使用して,自己電子証明書と秘密鍵を合成してpfx(個人情報交換)ファイルを作成する。
-この変換する時に,秘密鍵OreOreCertificate.pvkと自己電子証明書OreOreCertificate.cer,秘密鍵を暗号化した時のパスワードが必要となる。~+ 
 +変換する時に,秘密鍵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>  > 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ファイルに変換した。~ 以下のようにしてpfxファイルに変換した。~
Line 127: Line 152:
* Windowsの証明書ストアに電子証明書を登録する [#ifddd68f] * Windowsの証明書ストアに電子証明書を登録する [#ifddd68f]
-''pfxファイル''が作成できたら,その電子証明書をWindowsの証明書ストアに登録する。~+上記のどちらかの方法で''pfxファイル''が作成できたら,そのファイルを使って電子証明書をWindowsの証明書ストアに登録する。~
-証明書ストアに登録する理由は,アプリケーションにデジタル署名を追加する場合,Windowsでは電子証明書を参照するデフォルト場所として証明書ストアを使用しているから。~+証明書ストアに登録する理由は,アプリケーション等にデジタル署名を追加する場合,Windowsでは電子証明書を参照するデフォルト場所として証明書ストアを使用しているから。~
また,署名用証明書を証明書ストア登録しておくと,デジタル署名を検証する場合にも使用される。~ また,署名用証明書を証明書ストア登録しておくと,デジタル署名を検証する場合にも使用される。~
-証明書ストアに電子証明書を登録するには,証明書マネージャ(CertMgr.msc)を実行するか,certutilsコマンドで行う。~+証明書ストアに電子証明書を登録するには,証明書マネージャ(CertMgr.msc)を使用するか,certutilsコマンドで行う。~
証明書マネージャ(CertMgr.msc)で登録する場合は以下のようにする。~ 証明書マネージャ(CertMgr.msc)で登録する場合は以下のようにする。~
Line 157: Line 182:
これで作成した自己電子証明書を証明書ストアの「個人」へ,署名証明書を「信頼されたルート証明機関」に登録された。~ これで作成した自己電子証明書を証明書ストアの「個人」へ,署名証明書を「信頼されたルート証明機関」に登録された。~
 +
 +* 自己電子証明書で実行ファイルにデジタル署名する [#hf364b84]
 +実行ファイルに作成した自己電子証明書を使って,Windowsの実行ファイルにデジタル署名を追加してみる。~
 +ここでは,Microsoftのsigntoolコマンドを使用してみる。~
 +
 +コマンドの使い方は以下のようになっている。~
 + > signtool -fd sha256 -f <name-of-pfx-file>.pfx -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
* 自己電子証明書でPDFファイルにデジタル署名する [#n419b266] * 自己電子証明書でPDFファイルにデジタル署名する [#n419b266]
Line 174: Line 214:
他のアプリケーションでも同様にしてデジタル署名をすることが出来る。 他のアプリケーションでも同様にしてデジタル署名をすることが出来る。
-Adobe Acrobat Reader(無料版)だとPDFファイルにデジタル署名する場合制限があるので,他のPDFビューワー等を使ったほうが良い。~+%%Adobe Acrobat Reader(無料版)だとPDFファイルにデジタル署名する場合制限があるので,他のPDFビューワー等を使ったほうが良い。%%~
* 電子証明書をエクスポートして署名した文書と一緒に配布する [#l11089ab] * 電子証明書をエクスポートして署名した文書と一緒に配布する [#l11089ab]
-自己電子証明書を使ってデジタル署名したPDF文書を相手に渡す時には,そのデジタル署名を検証するときには自己署名証明書を一緒に渡す必要がある。~+自己電子証明書を使ってデジタル署名したPDF文書ファイルを相手に渡す場合,受け取った人がそのデジタル署名を検証するために,自己署名証明書を同時に渡す必要がある。~
この自己署名証明書としては自己電子証明書を作成した時に作成された署名用証明書''OreOreCertificate.cer''をそのまま使用できる。~ この自己署名証明書としては自己電子証明書を作成した時に作成された署名用証明書''OreOreCertificate.cer''をそのまま使用できる。~
Line 197: Line 237:
当たり前ではあるが,自己電子証明書(オレオレ電子証明書)を使ったデジタル署名なので,検証できたからといって信頼性が高いわけではないのだが・・・ 当たり前ではあるが,自己電子証明書(オレオレ電子証明書)を使ったデジタル署名なので,検証できたからといって信頼性が高いわけではないのだが・・・
-お金をかけないで信頼性が高いデジタル署名をするには,[[マイナンバーカードの署名用電子証明書と秘密鍵を使ってデジタル署名をする>../マイナンバーカードを使ってデジタル署名]]のが良いと思う。~+お金をかけないで信頼性が高い公的に通用するデジタル署名をするには,[[マイナンバーカードの署名用電子証明書と秘密鍵を使ってデジタル署名をする>../マイナンバーカードを使ってデジタル署名]]のが良いと思う。~


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 256, today: 1, yesterday: 1