Top / Network / 自己署名証明書

自己署名のサーバ証明書作成

自己署名証明書の作成方法をしらべました。

オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている

を参考にさせてもらいました。

秘密鍵の作成、証明書署名要求の作成

$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr

必要情報を入力

Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Tokyo
Locality Name (eg, city) []: Bunkyo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]: xxx.inc
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:hogehoge.example.com   ←ココ重要!!!!!!!!
Email Address []: xxx@ki-no.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Common Nameについては、使用するサーバ名とあわせておきましょう。

署名

最後に、自分の秘密鍵で署名します。

$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

以上で自己署名したサーバ証明書が完成です。

pfxファイル作成

ついでに、IIS等で使用する場合に使用されるpfx形式(秘密鍵と証明書が一つになったファイル形式)に変換します

秘密鍵、公開鍵形式からPKCS#12(pfx)形式への変換方法 | GeoTrust

$ openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx

参考

参考) pfxファイルを key/crt方式へ変換

pfxファイルからopensslでcertファイルへ変換する| prophet STAFF BLOG

 $  openssl pkcs12 -in server.pfx  -clcerts -nokeys -out server.crt    ← 証明書
 $  openssl pkcs12 -in server.pfx  -nocerts -nodes -out server.key   ← 秘密鍵
 $  openssl pkcs12 -in server.pfx  -cacerts -nokeys -out server.ca-bundle ←中間CA(あれば)

ついでに、暗号化・復号化をやってみる

さらについでにですが、はじめに作成した秘密鍵は、いわゆる公開鍵暗号方式の秘密鍵なので、公開鍵を作って暗号化/復号化をやってみようと思います。

秘密鍵から公開鍵を生成する。

$ openssl rsa -in server.key  -pubout -out server.pub

公開鍵は、秘密鍵からいつでも生成可能ってことですね。

公開鍵で暗号化、秘密鍵で復号化

$ echo 'hoge' | openssl rsautl -encrypt -pubin -inkey server.pub > encrypted.out
$ openssl rsautl -decrypt -inkey server.key  -in encrypted.out
hoge

公開鍵で暗号化したファイルを秘密鍵で復号が出来ました。

秘密鍵で暗号化、公開鍵で復号化

つづいて秘密鍵をもちいて暗号化しようとやってみますが、

$ echo 'hoge' | openssl rsautl -encrypt -inkey server.key > encrypted.out

実はコレは秘密鍵でなく、対応する公開鍵で暗号化している事になるらしい。実際にこのファイルは、先とおなじコマンド

$ openssl rsautl -decrypt -inkey server.key  -in encrypted.out

で復号化できます。

さて、ただしく秘密鍵で暗号化するには下記の通りにする必要があるそうです。

秘密鍵による暗号化

 $ echo 'hoge' | openssl rsautl -sign -inkey server.key > encrypted.out

公開鍵による復号

 $ openssl rsautl -verify -pubin -inkey server.pub  -in encrypted.out

秘密鍵による「encrypt」は公開鍵でいくらでも復号できちゃうので、暗号じゃなくて署名だ、という事だからみたいですね。

参考 OpenSSLから覗いた公開鍵暗号方式の謎 - hkawa117’s diary

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Network / 自己署名証明書

現在のアクセス:1437


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-10 (火) 17:52:24 (2208d)