自己署名のサーバ証明書作成 †自己署名証明書の作成方法をしらべました。 オレオレ証明書を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 関連リンク †
この記事は 現在のアクセス:1655 |