序章
Let's Encryptは、無料のTLS / SSL証明書を簡単に取得してインストールできる新しい認証局(CA)であり、Webサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方のWebサーバーで完全に自動化されています。
このチュートリアルでは、certbot
Let's Encryptクライアントを使用して無料のSSL証明書を取得し、CentOS7のNginxで使用する方法を示します。 また、SSL証明書を自動的に更新する方法についても説明します。
前提条件
このチュートリアルに従う前に、いくつかのことが必要になります。
sudo
権限を持つ非rootユーザーのCentOS7サーバー。 このようなユーザーアカウントを設定する方法については、 CentOS 7チュートリアルのサーバーの初期設定の手順1〜3を参照してください。- 証明書を使用する登録済みドメイン名を所有または管理する必要があります。 まだドメイン名を登録していない場合は、そこにある多くのドメイン名レジストラの1つに登録できます(例: Namecheap、GoDaddyなど)。
- ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 これが必要なのは、Let's Encryptが、証明書を発行しているドメインを所有していることを検証する方法のためです。 たとえば、
example.com
の証明書を取得する場合、検証プロセスを機能させるには、そのドメインをサーバーに解決する必要があります。 この設定では、ドメイン名としてexample.comとwww.example.comを使用するため、両方のDNSレコードが必要です。
すべての前提条件が整ったら、Let'sEncryptクライアントソフトウェアのインストールに進みましょう。
ステップ1— CertbotLet'sEncryptクライアントのインストール
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 example.com www.example.com;
ファイルを保存して、エディターを終了します。 次のコマンドを使用して、構成編集の構文を確認します。
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 example.com -d www.example.com
これは、--nginx
プラグインでcertbot
を実行し、-d
を使用して、証明書を有効にする名前を指定します。
certbot
を初めて実行する場合は、メールアドレスを入力して利用規約に同意するよう求められます。 その後、certbot
はLet'sEncryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。
それが成功すると、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パラメーターの更新
ここでSSLLabsサーバーテストを使用してサーバーをテストすると、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日以内になると、自動的に更新および再ロードされます。
cronジョブを作成およびスケジュールする方法の詳細については、VPSガイドでCronを使用してタスクを自動化する方法を確認してください。
結論
このチュートリアルでは、Let'sEncryptクライアントcertbot
をインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定しました。 Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。