Let’s encryptとは
無料で使えるSSL認証局で、Internet Security Research Group (ISRG)という団体が提供しています。
ISRGには、Current Sponsors – Let’s Encrypt – Free SSL/TLS Certificatesを見ると、しっかりスポンサーがついているので安心して使えそうです。
SAKURA Internetなど日本の企業もスポンサーも居ます。
証明書の発行とセットアップは、公式に提供されている Certbot コマンドで行います。
証明書の期限は90日で、エージェントが自動更新を行ってくれます。
ということは、AWSのELBのように、Let’s encrypt非対応のミドルウェアを利用している場合は、更新の仕組みを自分で用意する必要があります。
また、さくらのレンタルサーバなどLet’s encryptに対応していてるホスティングサービスの場合、サービスのコントロールパネルで設定が可能でセットアップが簡単にできたりするそうです。
さくらインターネットの「さくらのレンタルサーバ」、コントロールパネル上の簡単操作で無料SSL証明書「Let’s Encrypt」を設定可能に~「Let’s Encrypt」のシルバースポンサーとして参画し、常時SSL化推進に貢献~
提供は、10/17からのようです。
参照情報
公式サイト:Let’s Encrypt – Free SSL/TLS Certificates
日本語サイト: Let’s Encrypt 総合ポータル
Certbot: Certbot
仕組み
[Let’s Encrypt の仕組み – Let’s Encrypt 総合ポータル]に詳しい説明があります。
Apache on Ubuntu 16.04にセットアップ
Ubuntu 16.04にインストールされたApacheのhttpsアクセスを有効化した際の手順をまとめました。
前提条件
Let’s Encrypt の使い方 4. DNS設定と準備で確認できます
- DNS設定
- 80,443ポートが開いている
letsencrypto.work
というドメインに、digital oceanに立てたサーバーを設定しました
Apacheをインストール
確認用のApacheをインストール
$ sudo apt-get update
$ sudo apt-get install apache2 -y
また、80と443ポートを空けておきます
$ sudo ufw allow 'Apache Full'
DNS設定が有効になっているか、ブラウザなどでドメインにhttpアクセスをして、対象サーバーのApacheのデフォルトページが表示されることを確認しておきます
参考: How To Install the Apache Web Server on Ubuntu 16.04 | DigitalOcean
letsencryptコマンドをインストール
Ubuntu 16.04では、Certbotの古い名前のletsencryptコマンドをaptリポジトリよりインストールできます
$ sudo apt-get install letsencrypt python-letsencrypt-apache -y
参考: Certbot クライアントのインストール – Let’s Encrypt 総合ポータル > Ubuntu 16.04 (xenial)
aptリポジトリからではなく、Certbot公式のPPAリポジトリからもインストールすることも可能です
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ apt-get install python-certbot-apache -y
公式のインストール手順: Apache on Ubuntu 16.04 (xenial)
証明書のセットアップ letsencryptコマンドの場合
Let’s Encrypt の使い方 SSL/TLS サーバ証明書の取得を参考に証明書を取得してApacheのセットアップを行います
letsencrypt
コマンドを実行します
$ letsencrypt --apache
サブコマンドを指定しない場合のデフォルトはletsencrypt run
になります
ウィザードに沿ってインストールしていきます
<Yes>
を選択してEnterするとドメインを入力するプロンプトが表示されます
ドメインを入力し、<OK>
を選択してEnter
次は、通知用のEmailの入力するプロンプトが表示されます
メールアドレスを入力し、<OK>
を選択してEnter
次は、サービス利用規約の許諾をきかれるので
<Agree>
を選択してEnter
Apacheのセットアップ方法、httpアクセスを残すかどうかをきかれます
httpsアクセスのみに制限する場合はSecure
、<OK>
を選択してEnter
セットアップ完了!! とても簡単です。
<OK>
を選択してEnterすると以下のメッセージが表示され、シェルに戻ります
証明書のセットアップ Certbotコマンドの場合
CertbotをPPAリポジトリからインストールした場合は、certbot
コマンドを実行します
certbot
コマンドの場合は、コマンドラインのままプロンプトされます
# certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): admin@letsencrypt.work
-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------
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
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.letsencrypt.work
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for www.letsencrypt.work
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 www.letsencrypt.work to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-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
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://www.letsencrypt.work
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=www.letsencrypt.work
-------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.letsencrypt.work/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.letsencrypt.work/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
Apacheの設定の確認
letsencrypt
またはcertbot
コマンドを実行した後、Apacheの設定を確認すると、以下の設定が自動で行われたことを確認できます
/etc/apache2/sites-available/000-default-le-ssl.conf
の生成
Let’s encryptから取得した証明書を指定されています
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/www.letsencrypt.work/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.letsencrypt.work/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ServerName www.letsencrypt.work
</VirtualHost>
</IfModule>
/etc/apache2/sites-available/000-default.conf
http
でアクセスした場合に、https
にリダイレクトするように設定が追加されています
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.letsencrypt.work
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
証明書の更新設定
Let’s Encryptの証明書は90日間ですので、証明書の更新を設定しておく必要があります。
SSL/TLS サーバ証明書の更新 に従って設定します。
証明書の更新は、サブコマンドrenew
を使います。renew
を実行すると残り30日未満になると新しい証明書に更新してくれます。
よって、証明書の更新設定は、renew
のコマンドをcron
に登録するだけです。
renew
コマンドをテスト実行して問題なく動作するか確認しておきます
$ sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/www.letsencrypt.work.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for www.letsencrypt.work
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/www.letsencrypt.work/fullchain.pem
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/www.letsencrypt.work/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
以下のコマンドをcron
に登録します
certbot renew
証明書の破棄
証明書を使わなくなった場合は、以下のコマンドでRevokeできます
$ certbot revoke --cert-path /etc/letsencrypt/live/www.letsencrypt.work/fullchain.pem