• Top
  • Search
  • About
  • Privacy Policy
letsencrypt

概要

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

実行環境

  • Ubuntu / 18.04 LTS
  • apache2 / 2.4.29

Let’s Encrypt とは

letsencrypt

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

certbotとは

certbot

  • 読み方「サートボット」
  • 無料かつ自動で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

www.example.comexample.comを登録する例。

# 通知用メールアドレスを入力
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
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(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:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   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にリダイレクトするように設定が追加されてる)
/etc/apache2/sites-available/000-default.conf

# HTTPS (取得した証明書が指定してある)
/etc/apache2/sites-available/000-default-le-ssl.conf

# 取得した証明書類が置いてある
/etc/letsencrypt/live/example.com/

証明書の更新

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

参考情報