Categories: ツールの使い方

無料のSSL証明書Let’s Encryptを設定・更新・自動更新する方法(CentOS7, Apache2.4対応)

無料のSSL証明書Let’s Encryptを設定・更新・自動更新する方法を初心者向けに解説します。
GoogleがSSL化されたWebサイトをSEOの評価として優遇すると発表しており、Webページのhttps化は必須の流れとなっています。

Linuxサーバー構築運用入門 (CentOS7, PHP7, Apache, MySQL, WordPress対応)サポート記事です。

Let’ Encryptについて

誰でも無料で使えるSSL/TLS証明書発行サービスです。
mozilla, Google Chrome, facebook, ciscoなどがメジャースポンサーとなっていて安心感が有ります。

公式サイト


Let’s Encrypt

Certbotについて

この記事では、certbot(サートボット)という、Let’s Encryptの自動化を行うためのソフトウェアを利用します。

公式サイト

Certbot

ドキュメントなどが掲載されています(英語)

前提条件

  • CentOS7
  • Apache 2.4
  • httpでWebページを表示できる状態(http://blog.example.com といったURLではブラウザで表示できている状態)
  • VirtualHost設定済み
  • 設定するドメインはblog.example.com (各自のドメインに読み替えてください)

動画で学習する

① SSL証明書の設定 Let’s Encrypt

② SSL証明書設定の動作確認 Let’s Encrypt

③ SSL証明書の更新 Let’s Encrypt

インストールされるcertbotのバージョンを確認

$ yum list available | grep certbot-apache
python2-certbot-apache.noarch             0.21.1-1.el7                   epel

certbotインストール

$  sudo yum install certbot-apache
・・・略・・・
Is this ok [y/d/N]: y
・・・略・・・
完了しました!

SSL証明書の取得

$ sudo certbot --apache

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): nakamura@example.com ← 各自のメールアドレスを入力してエンターキー。
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A ← 利用規約を確認したら、Aを入力してエンターキー

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y ←  Electronic Frontier Foundationからメールを受け取り場合はY, 受け取らない場合は、Nを入力してエンターキー。
Starting new HTTPS connection (1): supporters.eff.org

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: blog.example.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 ← 1を入力してエンターキー(ドメインの選択)
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.example.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/conf.d/blog.example.com-le-ssl.conf
Deploying Certificate for blog.example.com to VirtualHost /etc/httpd/conf.d/blog.example.com-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 ← 2を選択してエンターキー(リダイレクトの設定。httpでのアクセスをhttpsにリダイレクトする)
Redirecting vhost in /etc/httpd/conf.d/blog.example.com.conf to ssl vhost in /etc/httpd/conf.d/blog.example.com-le-ssl.conf

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://blog.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=blog.example.com
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.example.com/privkey.pem
   Your cert will expire on 2018-06-08. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

「Congratulations! You have successfully enabled https://blog.example.net」と表示されれば、設定完了です。

動作確認

httpsでアクセス

ブラウザでhttpsから始まるURLでWebサイトを表示。

httpでアクセス

ラウザでhttpsから始まるURLでWebサイトを表示。
httpsへリダイレクトすることを確認する。

SSL証明書の更新

証明書の有効期限を確認する

$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: blog.example.com
    Domains: blog.example.com
    Expiry Date: 2018-06-03 10:31:54+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/blog.example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/blog.example.com/privkey.pem
-------------------------------------------------------------------------------

あと、SSL証明書の有効期限は、2018-06-03まで。残り88日であることが分かる。
Let’ EncrytpのSSL証明書は、有効期限3ヶ月と短いので注意しましょう。

次のコマンドを実行すると更新できます。(エンターキーはまだおさないでください)

$sudo   certbot renew

ただし、有効期限が30日未満のときしか更新されません。

–dry-run オプションをつけた上でリハーサル。

ドライランとは、簡単にいうとリハーサルです。おためし的に証明書を更新するコマンドを実行してエラーが起きないかなどを確認できます。ドライランでは、データの更新は行われないので安全です。

$ sudo certbot renew --dry-run
・・・略・・・
Congratulations, all renewals succeeded. 
・・・略・・・

ドライランが成功しました。
手動でSSL証明書を有効期限が30日未満になったら、ドラインランを実行してから、

$ sudo certbot renew

します。

もし、有効期限までの残り日数に関係なく、すぐに証明書を更新したい場合は、

次のコマンドを実行します。

$ certbot renew --force-renew

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/blog.example.com.conf
-------------------------------------------------------------------------------
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for blog.example.com
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/blog.example.com/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/blog.example.com/fullchain.pem (success)
-------------------------------------------------------------------------------

更新できました。

SSL証明書の自動更新。

更新を3ヶ月に一回手動でおこなっていると、いつか忘れてしまうので、自動で更新する方法を学習します。
「cron」クロンという、定期的に指定したプログラムを実行できる仕組みを使います。
クロンの読み方ですが、英語のカタカタ読みですので、なにが正しいとかは無いのですが、
実務上、クーロンと呼ぶこともあります。

スケジュールを設定するファイルを開く

$ sudo vim /etc/crontab

例えば、毎朝3:10に、rootユーザでcertbot renewを実行するには。

下記を追記。

10 3 *  *  * root /usr/bin/certbot renew

※ 注意点としては、ここでは、–force-renewalオプションはつけないでください、let’s encryptの使用量制限に引っかかる可能性があります。

これで、毎日更新がこころみられて、有効期限が30日未満だと、証明書の更新が実際に行われます。

注意点

特に初めてSSL証明書の更新が行われるまでは、

時々、証明書の有効期限を確認して、期限切れにならないように注意しましょう。

$ sudo certbot certificates

cronによって自動で証明書が更新されているか、確認してください。残り30日を切っているのに、数日様子を見ても、更新がされない場合は、なにかトラブルが起きている可能性があります。

その場合は、手動で更新を試みてみるのも一つの手です。

$sudo certbot renew

ログを確認して、トラブルシューティングをする方法もあります。
letsencryptのログは、このディレクトリにありますのでトラブルが起きたときに確認します。

$ sudo ls -la /var/log/letsencrypt/

例えば、最新のログを確認するには、

sudo less  /var/log/letsencrypt/letsencrypt.log

とします。表示されている、エラーメッセージをgoogleで検索したりしながら、解決を試みます。

SSL証明書の有効期限が切れると、ユーザーがサイトをブラウザで表示した時に、ブラウザにエラーが表示されて、ユーザから不審に思われてしまいますので、注意しましょう。

動作確認環境

  • CentOS Linux release 7.4.1708 (Core)
  • Server version: Apache/2.4.6 (CentOS)
  • python2-certbot-apache 0.21.1-1.el7
  • さくらのVPS 1Gプラン

おわりに

この記事では、無料のSSL証明書Let’s Encryptを設定・更新・自動更新する方法を学習しました。

オンライン講座、Linuxサーバー構築運用入門 (CentOS7, PHP7, Apache, MySQL, WordPress対応)では、Linuxの操作に慣れていない方向けに、無料のSSL証明書Let’s Encryptを設定・更新・自動更新する方法を説明しています。

動画で1からわかりやすく説明していますので、ぜひご利用ください。

動画でプログラミング入門をしよう

オンライン学習サービスProglus(プログラス)でプログラミングを学び、創れる人になろう!

プレミアムプランを2週間無料体験しよう

今すぐ詳細を確認する

プログラミング入門ナビ編集部