LoginSignup
7
6

More than 5 years have passed since last update.

Apache2.2系でECC版SSL証明書を導入してみる

Posted at

小悪魔女子大生のサーバーエンジニア日記で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を仕込みましょう。

ssl.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

んで、ブラウザで確認ですね

!!証明書エラー!! (゚д゚)!

証明書エラー.jpg

なんと証明書エラー発生しちゃいました。アルゴリズムはECCで接続できてるんですが・・・。

で、よくよく調べてみると、 テスト版の証明書はテスト用のルート証明書をブラウザにインポート しておかなければならないとのこと。。。 (´・ω・`)

→こちら←のルート証明書をブラウザにインポートしましょう。

そして、ブラウザを起動しなおして再接続すると・・・

キタ━(゚∀゚)━!

証明書OK.jpg

エラーもなく無事にECCの証明書でhttps接続できました!メッセージの署名もSHA256ですよ、お客さん。

まとめると、下記ですかねー。

  • Apache 2.2系でもさくっとECC版証明書が動いた
  • 小悪魔さんのサイトだと、テスト版ではないのでECC版とRSA版の2つの証明書を仕込んでいましたが、テスト版は本当にECC版のみの証明書だった
  • テスト用の証明書を使う時は、テスト用の中間証明書、ルート証明書を用いなければならなかった

正直なところ、有効期限短いんだし、有償版と同じ中間証明書、ルート証明書で発行して欲しいものですねー。

ではでは。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6