owned mediaウェブ制作に役立つコンテンツを発信中!

無料SSL証明書のLet’s EncryptでVPSサーバーの常時SSL化

最終更新日: Update!!
近年、Googleもウェブサイトの常時SSL化を強く推奨してきました。一般的なレンタルサーバーを使っている場合はオプションでSSL証明書が用意されていますが、VPSサーバーを使用していると自分で設定する必要があります。そこで今回はLet’s Encryptという無料で利用できるSSL証明書を使ってVPSサーバーで運用しているサイトの常時SSL化についての作業をまとめていきます。サーバーですが、さくらVPSを使用している前提で進めていきます。  
1. Let’s Encryptと証明書のインストール
1-1. まずはサーバーへSSH接続を行いログインします。その後、rootユーザーに切り替えます。   1-2. SSLを使用する上でApacheの「mod_ssl」が必要となります。下記コマンドで「mod_ssl」がインストールされているかを確認します。
# httpd -M
---------
ssl_module (shared)  // この表示があればOK
  1-3. さらにhttpsプロトコルで使用するポート番号の443がfirewallで開放されているかも以下のコマンドで確認しておきます。
# firewall-cmd --list-all
---------
services: dhcpv6-client http https ssh  // ここに「https」の表示があればOK
  1-4. これで問題なければ下記コマンドでLet’s Encryptのインストールを行います。途中で確認メッセージがありますので「y」を入力して先に進めていきます。
# yum install certbot python2-certbot-apache
  1-5. 続いて下記コマンドで証明書をインストールしていきます。サブドメインも対象とする場合には「-d」オプションで続けて指定し、複数のドメインが対象となる場合はそれぞれのドメインごとに作業を進めていきます。
# certbot --apache -d example1.com

// サブドメインにも適用させる場合は-dオプションで追加する
# certbot --apache -d example1.com -d www.example1.com -d foo.example1.com

// ドメインが複数ある場合は分けてコマンドを入力
# certbot --apache -d example2.com
# certbot --apache -d example3.com
  1-6. インストールが進んでいき、途中でメールアドレスを質問されるので入力します。
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [メールアドレスを入力]
  1-7. 続いて規約への同意が求められるので同意します。
(A)gree/(C)ancel: [A]
  1-8. 先ほど登録したメールアドレスの公開へ同意します。
(Y)es/(N)o: [Y]
  1-9. httpへのアクセスをhttpsにリダイレクトさせるかどうかを指定します。今回はリダイレクトさせる形で進めていきます。
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): [2]
  1-10. 設定が完了し、最後に証明書の鍵のパスなどの情報が表示されます。ブラウザでhttpsのURLにアクセスして確認します。また証明書の詳細情報を見ると発行者の項目に「Let's Encrypt」と表記されているのが確認できます。   無料SSL証明書のLet’s EncryptでVPSサーバーの常時SSL化 無料SSL証明書のLet’s EncryptでVPSサーバーの常時SSL化   また、2018年以降は証明書インストール時のcertbotコマンドで下記のエラーが出ることがあるようです。
Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.
  その場合は、下記のように一旦httpdを停止させてから、以下のコマンドで証明書をインストールし、再びhttpdを再起動させる形になります
# systemctl stop httpd
# certbot --authenticator standalone --installer apache -d example.com 
# systemctl start httpd
   
2. 証明書更新とcronによる自動更新設定
証明書は90日の有効期限があるので、都度更新する必要があります。有効期限が30日を切ったら下記コマンドで証明書の有効期限を更新することができます。
# certbot renew
  ただ、この方法ですとうっかり更新作業を忘れてしまったり、毎回の作業が面倒だったりするのでcronによるスケジューリングで自動更新させることも可能です。   2-1. まずは下記コマンドで更新が正しく行われるかを確認します。
# certbot renew --dry-run
  2-2. 更新されたのが確認できると下記コマンドで「crontab」ファイルを開き、cronのタスク登録を行います。
# vim /etc/crontab
  2-3. 「crontab」に下記のような形で証明書更新のタスクを追加します。以下の場合は毎日午前1時30分と2時30分に証明書更新を行う形になります。(何らかの原因で更新されないトラブルを防ぐため)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

// 以下を追記する
30 1 * * * root certbot renew --quiet
30 2 * * * root certbot renew --quiet
  2-4. 保存したら下記コマンドでcronを再起動します。
# systemctl restart crond
  ちなみに「/etc/letsencrypt/renewal/」配下にあるそれぞれのドメインに紐づいた設定ファイルで証明書の詳細情報が確認できます。また、ブラウザから証明書の更新日と有効期限も確認できます。  
  これでウェブサイトの常時SSL化が完了しました。作業自体はそんなに時間はかかりませんが、エラーが出たりする場合があるので、一つひとつの作業を確実に行うことが重要です。   もしhttpで既にサイトを運用している場合は、常時SSL化によっていくつか変更する作業が発生してきます。詳しくは「常時SSL化した後に行う変更作業まとめ」をご覧ください。   サイトの常時SSL化はセキュリティ面であったりSEOの観点から今後より重要になってくるかと思います。ぜひ早めに済ませておくことをオススメします!
  • はてなブックマーク
  • Pocket
  • Linkedin
  • Feedly

この記事を書いた人

Twitter

sponserd

    keyword search

    recent posts

    • Twitter
    • Github
    contact usscroll to top
      • Facebook
      • Twitter
      • Github
      • Instagram