初めてのSSL証明書作成(CoreSSL)と、Apacheに組み込んでSSLチェックツールで「A」とるまでのながれ
SSL証明書
httpsで通信する場合は、SSLサーバ証明書がいるのですがね、ってもうここらへんは釈迦に説法って感じなので説明を省きますが、オレオレ証明書を自分管理の公開ドメインで使っているのは、曲がり形にもエンジニアとしてどうかなって思ったので、重い腰を上げてSSL証明書取得~組み込みまで作業してみた。
と、いつもの自分備忘録なんです(^^
ちょっとやばかった、SSLチェックツール
何気なしに「SSLチェックツール」つーのを試してみたら「F」判定。オレオレ証明書やっぱりやばいなと(笑)。まあだれも攻撃してこないだろうけど踏み台、いや攻撃BOTになってたら洒落にならんよね。
国内格安SSL証明書事情
990円/年~ ってありますが代理店経由なので、ここらは為替レートに依存するみたいでタイミングでしょうかね。安いSSL証明書は、申請ベースなのでなんと言うか公的に証明され…まあ、ここらは個人サイトなのでいいでしょう。ってことで CoreSSLが3年で 990円/年 だったので決めました(英語読めればもっと安いとこありますw)。
導入手順
話がなげーんだよ。って。感じですよね。
手順があったのでそれを参考にしながら、進めます。
秘密鍵の作成
openssl をインストールしときます。パスフレーズの入力が面倒なので秘密鍵の暗号化なし、2048 ビット以上の鍵長として作成します。server.key は、大切なのでちゃんと管理しておきます(パスフレーズ付けた場合は、それもわすれずに)
# openssl md5 /bin/* > rand.dat
# openssl genrsa -rand rand.dat -out server.key 2048
秘密鍵から署名要求 (Certificate Signing Request) の作成
正確に入力すること。特にコモンネームは、https でアクセスする FQDN を正しく入力します(マルチの場合は、*.ドメイン)。間違って申請するとアウトなのできをつけましょう~(この段階なら何度でも作成可能ですので)。
Email Address, A challenge password, An optional company name は、入力しません。
[SHA-1証明書を使い続けるリスク] (https://jp.globalsign.com/sha256/background/)があるので、SHA-2 で作成します。オプション(-sha256
つけること)
# openssl req -new -sha256 -key server.key -out server.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:都道府県名
Locality Name (eg, city) [Default City]:市区町村名
Organization Name (eg, company) [Default Company Ltd]:組織名
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:コモンネーム
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
ちなみに CoreSSL の画面では、SHA-1 から SHA-2 に作り直してくれるのオプションがあるので万が一間違って SHA-1で作成したCSR でも平気ですが、今後のこともあるので間違わない方がいいね(言ってる自分がそれやらかした)。
証明書発行までの流れ
SSL BOX で証明書発行までの流れは以下のとおり。条件さえ整っていれば5分で証明書を発行してくれます。
プリペイドを買う(銀行振込み、カード、PayPal)⇒ 新規作成 ⇒ 新規取得 ⇒ 登録 ⇒ 完了
承認者メールアドレスで・・・
当然と言えば当然ですが、SSL証明書を発行するとき自ドメインに承認者メールアドレスがないと先にすすみません。なので一時的にしろメールを受け取れるように整備しておく必要があります。
Postfix で受信できる環境をさくっと作っとく
受信だけでいいので、sasl とか設定いらないのでさくっと。
adminユーザつくっときましたw
承認者メールアドレスに認証コードがあるのでぽちっとな
流れに進んでいくと、承認者メールアドレスに承認メールが届くので指定されたURLを叩いて認証コードを入れるだけ。これで全て手続き完了です。
CoreSSLの管理画面開いてステータスを確認しときます。
SSL証明書と中間証明書を設定する
Apache に秘密鍵、SSL証明書、中間証明書を設定します。
場所は、/etc/httpd/conf/ssl/crt に作ってみたけど、ここらへんは任意ってことでw
# mkdir -p /etc/httpd/conf/ssl/crt
# cd /etc/httpd/conf/ssl/crt
# cp server.key my.domain.key
# vi my.domain.crt ← CERT(SSL証明書)の内容を貼り付ける
# vi my.domain.inter.crt ← 中間証明書の内容を貼り付ける
Apacheのssl.conf に書いて、Apacheを再起動しブラウザで確認します。
SSLEngine on
SSLCertificateKeyFile /etc/httpd/conf/ssl/crt/my.domain.key
SSLCertificateFile /etc/httpd/conf/ssl/crt/my.domain.crt
SSLCACertificateFile /etc/httpd/conf/ssl/crt/my.domain.inter.crt
コマンドからも確認できるお
$ curl -kvI https://どめいん
さてSSLチェックツールで評価チェックしてみる
https://sslcheck.globalsign.com/ja で評価を。。なんだか「C」判定くらいましたw。CVE-2014-3566 脆弱性あるとか、TLS が・・・って怒られているのでここは、最初が肝心なので「A」評価にしたいと思います。
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder ON
SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5
[ApacheでOpenSSLのセキュリティを強化する]
(http://qiita.com/sion_cojp/items/99fee211ceace3f76cff)とかとか見ながら追加して(ちゃんとマニュアル読むべしだけどね)。再判定・・・「A」キター
中間証明書の確認方法
openssl コマンドで確認できる。
$ openssl s_client -connect localhost:443 -showcerts < /dev/null
これで
暫くは安心さ、あと3年後に更新・・・。
とりあえず1度やれば、会社の業務でも簡単にできそうなことが分かっただけいいとしよう。
その他
$3.65/年 とか 無料でSSL証明書を発行してくれるとこもあるみたい。そのうちやってみる。
Discussion