SSL証明書
自分の公開ドメインでhttpsを使用する際にオレオレ証明書を使用するのもエンジニアとしてどうかなって思ったので、いい機会なので「SSL証明書取得」=安いところ、そして「組み込み」、「セキュリティ設定」の流れで作業してみました。
ちなみにSSLサーバ証明書とは
・SSLサーバ証明書とは
国内格安SSL証明書事情
990円/年~ ってありますが代理店経由なので、ここらは為替レートに依存するみたいでタイミングでしょうかね。安いSSL証明書は、申請ベースなのでなんと言うか公的に証明され…まあ、ここらは個人サイトなのでいいでしょう。ってことで CoreSSLが3年で 990円/年 だったので決めました(英語読めればもっと安いとこありますw)。
クラウドSSL(旧CoreSSL)
2023/02/20 に、SSL証明書のブランド名が クラウドSSL(旧CoreSSL)に変更されました。安いことは変わりありませんが、昨今の円安と手数料がありお値段値上がりしてますね。
導入手順
話がなげーんだよ。って。感じですよね。
手順があったのでそれを参考にしながら、進めます。
秘密鍵の作成
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チェックツールで評価チェックしてみる
Qualys SSL LABSの「SSL Server Test」 で評価をとしてみましたが。初期の状態だと「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のセキュリティを強化する
中間証明書の確認方法
openssl コマンドで確認できる。
$ openssl s_client -connect localhost:443 -showcerts < /dev/null
これで
暫くは安心です、あと更新切れの3年後に証明書の入れ替えが・・・。
とりあえず1度経験してみれば、会社業務で頼まれても簡単にできそうなことが分かっただけいいとしよう。
その他
$3.65/年 とか 無料でSSL証明書を発行してくれるとこもあるみたい。そのうちやってみる。