• Top
  • Search
  • About
  • Privacy Policy


Let’s Encrypt を使って、SSLサーバー証明書を発行するところから証明書を更新するところまでのメモです。


  • Ubuntu / 18.04 LTS
  • apache2 / 2.4.29

Let’s Encrypt とは


  • 読み方「レッツ・エンクリプト」
  • 無料で利用可能なSSLサーバー証明書を発行する認証局
  • アメリカの非営利団体ISRG (Internet Security Research Group) が2016年から提供している
  • 証明書の発行とセットアップは、公式に提供されている certbot で行う
  • 証明書の有効期限は3ヶ月 (90日)



  • 読み方「サートボット」
  • 無料かつ自動でSSL証明書を発行できるツール
  • csrとkeyファイルの作成からWebサーバーの設定まで自動で行う
  • cronと組み合わせることで、証明書の更新作業まで完全に自動化することが可能
  • 証明書の署名と発行は Let’s Encrypt によって行われる


certbot をダウンロード

今回は、GitHub から certbot をダウンロードして使用します。
作業用のディレクトリ (任意の場所) に certbot をクローンします。

$ git clone https://github.com/certbot/certbot /usr/local/certbot


クローンした certbot の certbot-auto 機能を利用して、証明書のセットアップを行います。


$ /usr/local/certbot/certbot-auto --apache


# 通知用メールアドレスを入力
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): mail@example.com

# 利用規約に同意
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
(A)gree/(C)ancel: A

# DMの送付許可
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: N

# ドメイン名を入力 (www.など暗号化したいドメインが複数ある場合はカンマかスペースで列挙)
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): www.example.com,example.com
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for example.com
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate for example.com to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf

# http を https にリダイレクトするか選択
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
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-available/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

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

You should test your configuration at:

 - Congratulations! Your certificate and chain have been saved at:
   Your key file has been saved at:
   Your cert will expire on 2018-01-13. 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"
 - 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


セットアップウィザードが完了すると、https で通信ができるようになります。
https://example.com でアクセスしてみて、Webページが表示されるかを確認します。
※ リダイレクト設定をした場合、http://example.com と入力すると、https://example.com にリダイレクトされるようになっているはずです。


# HTTP (httpsにリダイレクトするように設定が追加されてる)

# HTTPS (取得した証明書が指定してある)

# 取得した証明書類が置いてある


Let’s Encrypt の証明書の有効期限は90日間なので、証明書を短い間隔で定期的に更新する必要があります。

証明書の更新は、certbot-auto のサブコマンドの renew を使います。
※ renew は実行した段階で、証明書の残り日数が30日未満の場合のみ証明書に更新してくれます。

$ /usr/local/certbot/certbot-auto renew

また、renew にはオプションコマンドの --dry-run があります。
renew の際に、--drya-run オプションをつけると、更新処理のテストができます。
※ 実行して Congratulations, all renewals succeeded. と言われたら成功です。

$ /usr/local/certbot/certbot-auto renew --dry-run

あとは、この renew コマンドを cron かCIツールに登録を行うことで、自動で更新をするようにします。

以下は、cron に登録する場合の例です。

# 毎週月曜日のAM 4:00に実行 (更新を行ったら、apacheを再起動させる)
00 4   * * 1   root    /usr/local/certbot/certbot-auto renew --renew-hook "service apache2 restart"

cron に登録したら、再起動するのを忘れないように。

$ sudo service cron restart