Let's Encrypt

Let's Encryptとは

Let's Encryptとは、SSL/TLS証明書を無料で発行できる認証局(CA)です。
SSL/TLS証明書を発行することでウェブサイトの通信を暗号化し、安全にデータ通信を行うことができます。
当マニュアルでは、Let's Encryptより提供される自動化ソフトウェア(Certbot)を利用し、SSL/TLS証明書を発行する手順をご紹介します。

当マニュアルにおける前提事項

  • Webサーバーソフトウェア(ApacheまたはNginx)が既にインストールされている
  • 独自ドメインを既に取得している
※ドメインの追加手順についてはこちら
また、当マニュアルではUbuntuOSをご利用とした手順を記載しています。

取得準備

サーバーに接続する

VPS管理画面のコンソールからも接続可能ですが、コピー&ペーストが可能なSSHクライアントソフトの使用をおすすめします。本マニュアルではTera Termを使用します。

Tera Termを起動し、VPSのIPアドレスを入力してください。

IPアドレスを入力

「ユーザー名(N)」に「root」、「パスフレーズ(P)」にイメージのインストール時に設定したパスフレーズを入力してください。

認証情報を入力

Let's Encryptは以下の方法でインストールできます。

SSL/TLS証明書の取得(プラグインを利用する場合)

1.事前準備

以下のコマンドを実行し、パッケージ一覧の更新を行ってください。

apt update -y

2.各種機能のインストール

ご利用のWebサーバーソフトウェアに合わせて以下のコマンドを実行し、certbotをインストールしてください。

■Apacheをご利用の場合
apt install certbot python3-certbot-apache

※python3-certbot-apacheとは
Webサーバー内のhttps設定を自動で行うためのcertbotをapacheと統合するプラグイン

■Nginxをご利用の場合
apt install certbot python3-certbot-nginx

※python3-certbot-nginxとは
Webサーバー内のhttps設定を自動で行うためのcertbotをnginxと統合するプラグイン

3.SSL/TLS証明書の取得

certbotを実行してください。

※ (ドメイン名)には独自のドメイン名を入力してください。

■Apacheをご利用の場合
certbot --apache -d (ドメイン名)
■Nginxをご利用の場合
certbot --nginx -d (ドメイン名)

certbotを実行するとメッセージが流れます。 メッセージに沿って必要な情報を入力してください。

以下の画面ではLet's Encryptからのメールを受け取るメールアドレスについて情報を入力する必要があります。
ご自身のメールアドレスを入力し「Enter」キーを押してください。

メールアドレスを入力

続いて、利用規約に同意する必要があります。
「Y」キーを入力し、同意してください。

契約に同意する

最後に、Let's Encryptのパートナーにメールアドレスの公開有無について答える必要があります。
公開しても良い場合には「Y」キー、公開したくない場合には「N」キーを入力し「Enter」キーを押してください。

メールアドレスの公開有無

「Successfully received certificate.」と表示されたら正常にSSL/TLS証明書の取得完了です。
取得された証明書は「/etc/letsencrypt/live/(ドメイン名)」に格納されます。

4.SSL/TLS証明書の自動更新

Let's EncryptのSSL/TLS証明書の有効期限は3ヶ月であるため、期限が迫った際に自動で更新できるように設定することを推奨します。

本手順ではnanoエディターを利用して設定を行います。
以下のコマンドを実行してください。

nano /etc/cron.d/letsencrypt-renew

cronジョブの設定値を入力し、保存してください。
必要に応じてcronの実行頻度を変更することも可能です。

※下記の設定例では毎月1日の00時00分にSSL/TLS証明書を更新し、更新前後にWebサーバーの停止と起動を行っています。

■Apacheをご利用の場合
0 0 1 * * root certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"
■Nginxをご利用の場合
0 0 1 * * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

設定後のファイル保存は「ctrl」と「x」キーを同時に入力してください。
「変更されたバッファを保存しますか?」と表示されるので、「y」キーを入力してください。
「書き込むファイル」にてファイルの指定に問題がなければ「enter」キーを入力し保存完了です。

cronを再起動し設定内容を反映させます。

systemctl restart cron

これで準備完了です。

プラグインの自動設定にて既にWebサーバー側の設定ファイルが更新されている状態の為、設定したドメインでウェブブラウザからhttpsアクセスが可能な状態となります。

SSL/TLS証明書の取得(standaloneとwebroot)

1.事前準備

以下を実行し、パッケージ一覧の更新を行ってください。

apt update -y

2.各種機能のインストール

以下を実行し、certbotをインストールしてください。

apt install certbot

3.SSL/TLS証明書の取得

certbotを実行してください。

※ (ドメイン名)と(証明用ファイルを格納するルートディレクトリのパス)を独自のものに変更してください。

■standaloneモードの場合
certbot certonly --standalone -d (ドメイン名)
■webrootモードの場合
certbot certonly --webroot -d (ドメイン名) -w (証明用ファイルを格納するルートディレクトリのパス)

certbotを実行するとメッセージが流れます。 メッセージに沿って必要な情報を入力してください。

以下の画面ではLet's Encryptからのメールを受け取るメールアドレスについて情報を入力する必要があります。
ご自身のメールアドレスを入力し「Enter」キーを押してください。

メールアドレスを入力

続いて、利用規約に同意する必要があります。
「Y」キーを入力し、同意してください。

契約に同意する

最後に、Let's Encryptのパートナーにメールアドレスの公開有無について答える必要があります。
公開しても良い場合には「Y」キー、公開したくない場合には「N」キーを入力し「Enter」キーを押してください。

メールアドレスの公開有無

「Select the appropriate number [1-2]:」と聞かれた場合、「2」キーを入力し「Enter」キーを押してください。
「2」を選択することで、HTTPへのアクセスをHTTPSにリダイレクトされます。

「Successfully received certificate.」と表示されたら正常にSSL/TLS証明書の取得完了です。
取得された証明書は「/etc/letsencrypt/live/(ドメイン名)」に格納されます。

4.SSL/TLS証明書の自動更新

Let's EncryptのSSL/TLS証明書の有効期限は3ヶ月であるため、 期限が迫った際に自動で更新できるように設定することを推奨します。

新規ファイル「/etc/cron.d/letsencrypt-renew」を作成し、自動更新を行うようにします。
本手順ではnanoエディターを利用して設定を行います。

以下のコマンドを実行してください。

nano /etc/cron.d/letsencrypt-renew

cronジョブの設定値を入力してください。必要に応じてcronの実行頻度を変更することも可能です。

※下記の設定例では毎月1日の00時00分にSSL/TLS証明書を更新し、更新前後にWebサーバーの停止と起動を行っています。

■Apacheをご利用の場合
0 0 1 * * root certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"
■Nginxをご利用の場合
0 0 1 * * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

設定後のファイル保存は「ctrl」と「x」キーを同時に入力してください。
「変更されたバッファを保存しますか?」と表示されるので、「y」キーを入力してください。
「書き込むファイル」にてファイルの指定に問題がなければ「enter」キーを入力し保存完了です。

cronを再起動し設定内容を反映させます。

systemctl restart cron

5.Webサーバーの設定

Webサーバー側も設定を行う必要があります。
本手順ではデフォルトで作成される設定ファイルを利用し手順をご紹介します。

■Apacheをご利用の場合

各種モジュールを有効にする必要があります。 以下のコマンドを実行してください。

rewriteモジュールを有効にします。
これによりhttp通信におけるリダイレクト機能を有効にすることができ、https通信へリダイレクトすることができます。

a2enmod rewrite

SSLモジュールを有効にします。

a2enmod ssl

デフォルトで作成されているSSLサイト設定を有効化にします。
※デフォルトで「/etc/apache2/sites-available」直下に「default-ssl.conf」ファイルが作成されています。

a2ensite default-ssl

設定ファイルを編集します。
以下はデフォルトで作成される仮想host設定ファイル(000-default.conf)にて設定を行っています。

※ご利用の環境にて既に設定ファイルを構成している場合にはご自身の環境に合わせて設定してください。

nano /etc/apache2/sites-available/000-default.conf

下記の内容を追記・編集してください。
赤字部分はご利用のドメイン名に置き換えて記載してください。

<VirtualHost *:80>
・・・省略・・・

RewriteEngine On
RewriteCond %{SERVER_NAME} =ドメイン名
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

・・・省略・・・
</VirtualHost>

次にSSLのサイト設定を行います。
以下はデフォルトで作成される設定ファイル(default-ssl.conf)にて設定を行っています。

※ご利用の環境にて既に設定ファイルを構成している場合にはご自身の環境に合わせて設定してください。

nano /etc/apache2/sites-available/default-ssl.conf

下記内容を追記・編集を行います。

ServerName example.com
SSLCertificateFile     /etc/letsencrypt/live/ドメイン名/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem

設定後、Apacheの設定に問題がないかチェックします。
以下コマンドを実行し、「Syntax OK」と出力されるか確認してください。

apachectl configtest

問題なければApacheの再起動を行ってください。

systemctl restart apache2

以上で設定は完了です。

■Nginxをご利用の場合

下記内容を追記・編集を行い、保存してください。

以下のコマンドを実行してください。
本手順ではsample.confという設定ファイルを利用します。

nano /etc/nginx/conf.d/sample.conf

下記の内容を追記・編集します。
赤字部分はご利用の環境に合わせて置き換え記載してください。

server {
  listen 80;
  listen [::]:80;
  server_name ドメイン名
  root ルートディレクトリのパス;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name ドメイン名

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;

  ssl_certificate     /etc/letsencrypt/live/ドメイン名/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

}

設定後のファイル保存は「ctrl」と「x」を同時に入力してください。
「変更されたバッファを保存しますか?」と表示されるので、「y」を入力してください。
「書き込むファイル」にてファイルの指定に問題がなければ「enter」を入力し保存完了です。

以下コマンドを実行し、Nginxの設定に問題がないかチェックしてください。

nginx -t

「nginx: the configuration file /etc/nginx/nginx.conf syntax is ok」
「nginx: configuration file /etc/nginx/nginx.conf test is successful」
が出力された場合は問題ありません。

Nginxの再起動を行ってください。

systemctl restart nginx

以上で設定は完了です。