小悪魔女子大生のサーバーエンジニア日記でECC対応版SSL証明書の設定方法が書かれてて、文中に「ベリサインではテスト用のECC版SSL証明書の提供が行われている」っていうのを見つけたので、自分の環境でも試してみました。
小悪魔さんの手順をトレースするだけだと芸がないので、Apache v2.2.26(release note)からECC対応がバックポートされてるので、Apache 2.2系で頑張ってみます。
0. 環境
CentOS 6.5(x64)
openssl 1.0.1e-16
1. Apacheのインストール
CentALTレポジトリを使って、2.2系の新しいパッケージをインストします。
$ wget http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
$ sudo rpm -ivh centalt-release-6-1.noarch.rpm
$ sudo yum -y install httpd mod_ssl
$ rpm -qa | egrep "httpd|mod_ssl"
httpd-2.2.26-2.el6.x86_64
httpd-tools-2.2.26-2.el6.x86_64
mod_ssl-2.2.26-2.el6.x86_64
$ sudo /sbin/service httpd start
無事にApache 2.2.26がインストされました。
iptablesで穴あけしましょう、とかchkconfigで自動起動設定しましょう、というのは端折りますね。
2. ECC版SSL証明書の作成
まずはECC版の秘密鍵とCSRを作成します。
小悪魔さんサイトとベリサインの→ここ←も参考にしました。
$ openssl ecparam -out ecc_private.key -name prime256v1 -genkey
$ openssl req -new -key ecc_private.key -out ecc_request.csr
~~ この後、対話式で国、地域、社名、CommonNameなど聞かれるので入力します ~~
$ cat ecc_request.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIBlDCCATwCAQAwgb4xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEVMBMG
~~snip~~
af9iFYXTbGBX+NcmGEFdOaIogIg/mZyx
-----END CERTIFICATE REQUEST-----
CSRができたので、お試しECC版証明書発行サイトに ecc_request.csr の文字列と、個人情報系を入力しましょう。ちなみに私の場合だと、夕方に申し込んで、翌日昼前にECC証明書が届きました!(公式には5営業日かかるとのこと)
証明書の有効期限は14日なので、届いたらさっさとインスト&確認を進めましょう。
3. Apacheに証明書の取り込み
メールで届いた署名済みの公開鍵をペタっとコピペで作成します。
$ sudo vim /etc/pki/tls/certs/ecc_common.crt
opensslコマンドで作成した秘密鍵も配置しましょう
$ sudo cp -p ~/ecc_private.key /etc/pki/tls/private/.
$ sudo chmod 600 /etc/pki/tls/private/ecc_private.key
中間証明書も→ここ←から取得してペタっと作成しましょう。
ちなみに上記のリンクはテスト用の中間証明書です。有償(正規)版とは異なるものを使う必要あります。
$ sudo vim /etc/pki/tls/certs/ecc_ca_test.crt
ここまでで証明書の配置は完了したので、次はApacheのconfを仕込みましょう。
SSLCertificateFile /etc/pki/tls/certs/ecc_common.crt
SSLCertificateKeyFile /etc/pki/tls/private/ecc_private.key
SSLCertificateChainFile /etc/pki/tls/certs/ecc_ca_test.crt
上記の3行に配置したファイルを指定するだけです!
443をListenとかmod_sslをLoadModuleするとかSNIでVirtualHost毎に証明書を、とかは端折ってますからねー
4. Apacheを再起動して確認!
Apacheに反映です。一応configtestしてから再起動しましょう!
$ sudo /sbin/service httpd configtest && sudo /sbin/service httpd restart
んで、ブラウザで確認ですね
!!証明書エラー!! (゚д゚)!
なんと証明書エラー発生しちゃいました。アルゴリズムはECCで接続できてるんですが・・・。
で、よくよく調べてみると、 テスト版の証明書はテスト用のルート証明書をブラウザにインポート しておかなければならないとのこと。。。 (´・ω・`)
→こちら←のルート証明書をブラウザにインポートしましょう。
そして、ブラウザを起動しなおして再接続すると・・・
キタ━(゚∀゚)━!
エラーもなく無事にECCの証明書でhttps接続できました!メッセージの署名もSHA256ですよ、お客さん。
まとめると、下記ですかねー。
- Apache 2.2系でもさくっとECC版証明書が動いた
- 小悪魔さんのサイトだと、テスト版ではないのでECC版とRSA版の2つの証明書を仕込んでいましたが、テスト版は本当にECC版のみの証明書だった
- テスト用の証明書を使う時は、テスト用の中間証明書、ルート証明書を用いなければならなかった
正直なところ、有効期限短いんだし、有償版と同じ中間証明書、ルート証明書で発行して欲しいものですねー。
ではでは。