SSL証明書~そしてセキュリティ設定をAに
自分が所有しているドメインでWebサービスを立ち上げていますが、窓際SEとしてもhttpsを使用する際にオレオレ証明書を使用するのはいかがなものかな?と思っていました。ちょうどドル円が120円(2015年)もあり、いい機会なので「SSL証明書取得」=安いところで取得、そしてWebサーバに「組み込み」、「セキュリティ設定を強化」の流れで作業してみました。
国内格安SSL証明書事情
※2015年当時です
国内格安SSL証明書を調べると CoreSSL が安く個人および一般の会社でも使用されていることが分かり導入を決定しました。なにせ 990円/年 ですので個人的にもハードルが低く(主にお財布)よしとしました。ただこの ”990円/年” については、代理店経由もありドル円の為替レートに依存するようです。
調べたところ海外のサイトはもっと安いSSL証明書もあるようですが、英語読めれば…とスルーしましたw。
※2024年現在です
1,650円(税込)/年 になってましたorz
クラウドSSL(旧CoreSSL)
2023/02/20 に、SSL証明書のブランド名が クラウドSSL(旧CoreSSL)に変更されました。安いことは変わりありませんが、昨今の円安と手数料がありお値段値上がりしてますね。
導入:秘密鍵の作成
まず Linux/Windows どの環境でもよいので openssl をインストールします。
そして秘密鍵を作成していくのですが私は、パスフレーズ入力なしの(忘れてしまうので)、2048 ビット以上の鍵長として作成します。
# openssl md5 /bin/* > rand.dat
# openssl genrsa -rand rand.dat -out server.key 2048
server.key は、大切なのでちゃんと管理しておきます(パスフレーズ付けた場合は、それもわすれずに)
導入:秘密鍵から署名要求 (Certificate Signing Request) の作成
次にサーバ証明書を発行するための署名要求(Certificate Signing Request)を
設定していきます。こちらの入力は正確、正しく入力しましょう。特にコモンネームは、https でアクセスする FQDN を正しく入力しますが(マルチの場合は、*.ドメイン)。間違って入力しこのまま進めるとアウトですので特に慎重にね(この段階なら何度でも作成可能です)。
あと Email Address, A challenge password, An optional company name
は、入力しなくとも大丈夫です。
かならず SHA-2 (SHA-256) で作成しましょう。オプション(-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 []:
証明書発行までの流れ
SSL BOX で証明書発行までの流れは以下のとおり。条件さえ整っていれば5分で証明書を発行してくれます。
プリペイドを買う(銀行振込み、カード、PayPal)⇒ 新規作成 ⇒ 新規取得 ⇒ 登録 ⇒ 完了
承認者メールアカウントを用意する
SSL証明書発行側で一連の手続きが終了すると、実際にSSL証明書を使用するドメイン宛て(一般的に admin@自ドメイン
)に 承認メール が送信されます。このとき当たり前ですが、自ドメインにメールサーバを用意することはもちろんの他、承認者メールアカウントを作成し受信できるようしておく必要があります(承認作業だけなので一時的でも問題なし)。
Postfix で受信できる環境をさくっと作っとく
受信だけでいいので、sasl とか設定いらないのでさくっと。
承認者メールアドレスに認証コードがあるのでぽちっとする
そのようなわけで無事に 承認者メールアドレス宛に承認メールが届いたら内容を確認します。メールの内容には 「承認先URL,認証コード」が記載されているハズなので画面に従って進みます(英語だけどなんとなく分かると思います)。
はい。これで全て手続き完了です。
最後に CoreSSLの管理画面開いてステータスを確認し 発行済み
であれば問題ありません。
SSL証明書と中間証明書を設定する
Apache に秘密鍵、SSL証明書、中間証明書を設定します。
場所は、/etc/httpd/conf/ssl/crt に作成してみましたが、ここらは好きな場所指定すればよいです。
※一般的には、/usr/local/ssl/certs/
らしいですね。
SSL証明書と中間証明書は、下記からダウンロードできるようです。
# 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 ← 中間証明書の内容を貼り付ける
以下 /etc/httpd/conf.d/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」判定となり例えば 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
ここが参考になりました
中間証明書の確認方法
openssl コマンドで確認できる。
$ openssl s_client -connect localhost:443 -showcerts < /dev/null
最後に
これで暫くは安心です、あと更新切れの3年後に証明書の入れ替(~2020までのこと)に備えればOKです。
あととりあえず一連の流れを1度でも経験してみれば、会社業務でSSL証明書作成~導入と頼まれても簡単にできそうなことが分かっただけいいとしました。
※2024現在は、1年の証明書期間となっています
有効期限の延長について ★特に注意★
有効期限期限切れは、30日前からアナウンスしてくれるのですが延長する際には、有効期限ギリギリに延長するのがよいと思います。
具体的には…
2023/6/17 ~ 2024/6/18 とした場合
2024/6/4 で延長をすると
2024/6/4 ~ 2025/6/5 となります。※2週間ほどもったいないorz
ご参考まで~~~
その他
$3.65/年 とか 無料でSSL証明書を発行してくれるとこもあるみたい。そのうちやってみる。