観る将エンジニアブログ

見る将歴8年のエンジニアの技術系ブログ。

ConoHaでSSL化対応してhttps通信できるようにする

今回はhttp://ドメイン名で表示できるサイトをSSL化対応してhttps://ドメイン名で表示できるようにします。

OS:CentOS7.4 (現時点でConoHaでの最新版です)

SSL化とは

http通信は情報がだだもれでデータを傍受されたりして安全とは言えない。

https通信は暗号化しており、セキュアな通信するために認証局からSSL証明書を発行してもらっている。

これでユーザが安心してブラウジングできるようになる。

うちのサイトは個人情報扱わないからいいやと思うかもしれないが、googleさんはhttpsのサイトを評価するらしく、

今後は検索順位に影響するらしいので必ずやっておいた方がいい。

SSL化手順

#ファイヤウォールがhttps通信を許可しているか確認
firewall-cmd --list-all | grep services
#  下記のようにhttpsが抜けているはず
#   services: ssh dhcpv6-client http

# https通信を有効にする
firewall-cmd --permanent --add-service=https --zone=public

# 再起動
firewall-cmd --reload

# certbot(SSL証明書を発行するツール)をインストール
yum install -y certbot

# 証明書を発行
 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 

#nginx側の設定を行う。/etc/nginx/conf.d/default.confを編集
vi /etc/nginx/conf.d/default.conf

下記のように設定。

server {
-    listen 80;
+    listen 443 ssl;
+    ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

systemctl restart nginxで設定を反映させ、http://ドメイン名では表示されず、https://ドメイン名で表示すれば成功。

証明書の有効期限は3ヶ月なのでcertbot renewコマンドをクーロンで定期実行すればよいが、 このままだとこのコマンドが80番ポートを利用するためnginxの設定を変更しなければならない。

それを避けるため--webrootを利用する。このモードはドキュメントルート以下に/.well-known/acme-challenge/というディレクトリを作ってその中に認証用のファイルを書き出し、letsencryptのサイトから取らせることにより認証しようとする。サービスで使っているNginxを利用するため止める必要がなくなる。

一旦、--standaloneで実行して作成された設定ファイル/etc/letsencrypt/renewal/ドメイン名.conf--webrootのものに書き換えるには次の様に--webrootを指定し、force-renewalをつけて実行すると設定ファイルが上書きされる。

 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 --agree-tos --force-renewal -n

crontab -eでクーロンの設定編集画面を開き、下記を追記する

0 4 1 * * /usr/bin/certbot renew && /usr/bin/systemctl reload nginx

この設定で毎月1日の朝4時に証明書を取りに行ってnginxを再起動する。

これで完了。またクーロンがちゃんと動くか分からないので3月1日にうまく行っているか確認して追記します。