前書き

Let’s Encryptは、無料のTLS / SSL証明書を簡単に取得してインストールする新しい認証局(CA)です。これにより、Webサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)の自動化を試みるソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、ApacheおよびNginx Webサーバーの両方で、証明書の取得とインストールのプロセス全体が完全に自動化されています。

このチュートリアルでは、 + certbot + Let’s Encryptクライアントを使用して無料のSSL証明書を取得し、CentOS 7のNginxで使用する方法を示します。 また、SSL証明書を自動的に更新する方法も示します。

前提条件

このチュートリアルを実行する前に、いくつかのものが必要です。

  • `+ sudo +`特権を持っている非rootユーザーを持つCentOS 7サーバー。 CentOSの初期サーバーセットアップ7チュートリアル

  • 証明書を使用する登録ドメイン名を所有または制御する必要があります。 登録済みのドメイン名をまだお持ちでない場合は、多数のドメイン名レジストラーのいずれかに登録できます(例: Namecheap、GoDaddyなど)。

  • ドメインがサーバーのパブリックIPアドレスを指すDNS レコード。 これは、Let’s Encryptが証明書を発行するドメインを所有していることを検証する方法のために必要です。 たとえば、「+ example.com +」の証明書を取得する場合、検証プロセスが機能するためには、そのドメインがサーバーに解決される必要があります。 このセットアップでは、ドメイン名として* example.com および http://www.example.com [www.example.com] を使用するため、*両方のDNSレコードが必要です

すべての前提条件が整ったら、次にLet’s Encryptクライアントソフトウェアのインストールに進みましょう。

ステップ1-Certbot Let’s Encrypt Clientのインストール

Let’s Encryptを使用してSSL証明書を取得する最初のステップは、サーバーに「+ certbot +」ソフトウェアをインストールすることです。 現在、これをインストールする最良の方法はEPELリポジトリを使用することです。

次を入力して、サーバー上のEPELリポジトリへのアクセスを有効にします。

sudo yum install epel-release

リポジトリが有効になったら、次のように入力して `+ certbot-nginx +`パッケージを取得できます。

sudo yum install certbot-nginx

「+ certbot +」Let’s Encryptクライアントがインストールされ、使用できる状態になりました。

ステップ2-Nginxのセットアップ

Nginxをまだインストールしていない場合は、今すぐインストールできます。 EPELリポジトリは前のセクションで既に有効になっているはずなので、次のように入力してNginxをインストールできます。

sudo yum install nginx

次に、 `+ systemctl +`を使用してNginxを起動します。

sudo systemctl start nginx

CertbotはNginx用にSSLを自動的に設定できますが、設定で正しい「+ server 」ブロックを見つけることができる必要があります。 これは、証明書をリクエストしているドメインに一致する ` server_name +`ディレクティブを探すことでこれを行います。 Nginxの新規インストールを開始する場合は、デフォルトの構成ファイルを更新できます。

sudo vi /etc/nginx/nginx.conf

既存の `+ server_name +`行を見つけます:

/ etc / nginx / sites-available / default

server_name _;

`+ _ +`アンダースコアをドメイン名に置き換えます:

/etc/nginx/nginx.conf

server_name  ;

ファイルを保存して、エディターを終了します。 以下を使用して、構成編集の構文を確認します。

sudo nginx -t

エラーなしで実行される場合、Nginxをリロードして新しい構成をロードします。

sudo systemctl reload nginx

Certbotは正しい「+ server +」ブロックを見つけて更新できるようになります。 次に、ファイアウォールを更新してHTTPSトラフィックを許可します。

ステップ3-ファイアウォールの更新

ファイアウォールを有効にしている場合は、ポート80と443が着信トラフィックに対して開いていることを確認してください。 ファイアウォールを実行していない場合は、スキップできます。

  • firewalld *ファイアウォールを実行している場合は、次のように入力してこれらのポートを開くことができます。

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent
  • iptables *ファイアウォールを実行している場合、実行する必要があるコマンドは現在のルールセットに大きく依存しています。 基本的なルールセットの場合、次のように入力してHTTPおよびHTTPSアクセスを追加できます。

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

これで、Certbotを実行して証明書を取得する準備が整いました。

ステップ4-証明書の取得

Certbotは、さまざまなプラグインを介してSSL証明書を取得するさまざまな方法を提供します。 Nginxプラグインは、必要に応じてNginxを再構成し、構成を再読み込みします。

sudo certbot --nginx -d  -d

これは、「-nginx +」プラグインで「 certbot 」を実行し、「-d +」を使用して証明書を有効にする名前を指定します。

初めて `+ certbot `を実行する場合は、電子メールアドレスを入力し、利用規約に同意するよう求められます。 これを行った後、「 certbot +」はLet’s Encryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。

それが成功した場合、「+ certbot +」はHTTPS設定をどのように構成するかを尋ねます。

OutputPlease choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

選択項目を選択し、「+ ENTER」を押します。 設定が更新され、Nginxがリロードして新しい設定を取得します。 `+ certbot +`は、プロセスが成功したこと、および証明書が保存されている場所を通知するメッセージで終了します。

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
  expire on 2017-10-23. 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

証明書がダウンロード、インストール、およびロードされます。 `+ https:// +`を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 サイトが適切に保護されていることを示す必要があります。通常、緑色のロックアイコンが表示されます。

ステップ5-Diffie-Hellmanパラメーターの更新

SSL Labs Server Testを使用してサーバーをテストする場合、Diffie-Hellmanパラメーターが弱いため、* B *グレードのみが取得されます。 これは、サーバーとユーザー間の最初のキー交換のセキュリティに影響します。 これを修正するには、新しい `+ dhparam.pem `ファイルを作成し、それを ` server +`ブロックに追加します。

`+ openssl +`を使用してファイルを作成します。

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

これには数分かかります。 完了したら、 `+ server +`ブロックを含むNginx構成ファイルを開きます。 この例では、デフォルトの構成ファイルです。

sudo vi /etc/nginx/nginx.conf

`+ server +`ブロック内の任意の場所に次の行を貼り付けます:

/etc/nginx/nginx.conf

. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ファイルを保存してエディターを終了し、構成を確認します。

sudo nginx -t

エラーがない場合は、Nginxをリロードします。

sudo systemctl reload nginx

サイトのセキュリティが強化され、* A *の評価を受けるはずです。

ステップ6-自動更新の設定

Let’s Encryptの証明書は90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 有効期限が切れる証明書を確認して自動的に更新するために、定期的に実行するコマンドを設定する必要があります。

更新チェックを毎日実行するには、定期的なジョブを実行するための標準システムサービスである `+ cron `を使用します。 ` crontab `と呼ばれるファイルを開いて編集することにより、 ` cron +`に何をすべきかを伝えます。

sudo crontab -e

テキストエディタは、この時点で空のテキストファイルであるデフォルトのcrontabを開きます。 次の行を貼り付けて、保存して閉じます。

crontab

. . .
15 3 * * * /usr/bin/certbot renew --quiet

この行の「+15 3 * * * +」の部分は、「毎日午前3時15分に次のコマンドを実行する」ことを意味します。 いつでも選択できます。

Certbotの `+ renew `コマンドは、システムにインストールされているすべての証明書を確認し、30日以内に期限切れになるように設定されている証明書を更新します。 `-quiet +`は、Certbotに情報を出力しないか、ユーザーの入力を待つように指示します。

`+ cron +`はこのコマンドを毎日実行します。 有効期限が切れる30日以内にインストールされたすべての証明書は、自動的に更新および再ロードされます。

結論

このチュートリアルでは、Let’s Encryptクライアント「+ certbot +」をインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを設定し、自動証明書更新を設定しました。 Certbotの使用についてさらに質問がある場合は、https://certbot.eff.org/docs/ [それらのドキュメント]から始めるのが良いでしょう。