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日にうまく行っているか確認して追記します。