概要
Let's Encryptは、ウェブサイトのSSL / TLS証明書を無料で取得する簡単な方法を提供する認証局であり、ウェブサーバーで暗号化されたhttpsを有効にします。 Let’s Encryptは、CertBotと呼ばれるソフトウェアを使用してSSL証明書の調達とインストールを簡素化します。このソフトウェアクライアントは、ApacheWebサーバーの完全に自動化されたプロセスを提供します。ただし、Let’s Encryptの無料のSSL証明書は、いくつかの内部調整を行うことで、任意のWebサーバーに手動でインストールできます。
このチュートリアルでは、certbot-auto
を使用する手順を示します。 クライアントを暗号化して無料のSSL証明書を取得し、Ubuntu14.04のNginxで使用しましょう。このチュートリアルでは、SSL証明書を自動的に更新する方法についても説明します。別のウェブサーバーを実行している場合は、ウェブサーバーのドキュメントに従って、セットアップで証明書を使用する方法を確認してください。
前提条件
- Sudo権限を持つroot以外のユーザー
- SSL証明書を取得するドメインを所有しているか、管理者が管理している必要があります。
- DNSパネルの下に作成され、ドメインがサーバーのパブリックIPアドレスを指すAレコード。これは、Let’sEncryptが証明書を発行しているドメインを所有していることを検証する方法のために必要です。たとえば、
example.com
の証明書を取得する場合 、検証プロセスが機能するには、そのドメインがサーバーに解決される必要があります。セットアップではexample.com
を使用します およびwww.example.com
ドメイン名として、両方のDNSレコードが必要です
ステップ1-Let’sEncryptクライアントをインストールする
最初に、サーバーにCertBotソフトウェアクライアントをダウンロードする必要があります。 CertBotはEFFの公式ウェブサイトからダウンロードできます。
サーバーの/usr/local/sbin directory on your server:
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto [sudo] password for example: --2016-11-28 13:26:28-- https://dl.eff.org/certbot-auto Resolving dl.eff.org... 173.239.79.196 Connecting to dl.eff.org|173.239.79.196|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 44442 (43K) [text/plain] Saving to: `certbot-auto' 100%[======================================>] 44,442 154K/s in 0.3s 2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]>
これで、Cert-Botがサーバーの/ usr / local/sbinにダウンロードされます。次のコマンドを入力して、ファイルを実行可能にします。
sudo chmod a+x /usr/local/sbin/certbot-auto
これで、Cerbot-autoソフトウェアをインストールする準備が整いました。
ステップ2—証明書を取得する
さまざまなプラグインを介してLet’sEncryptからSSL証明書を取得する方法はいくつかあります。 SSL証明書を取得するには、オーセンティケータープラグインを取得する必要があります。これらのプラグインは証明書のみを取得するため、証明書を手動でインストールする必要があることを確認してください。
このチュートリアルでは、 Webrootというプラグインを使用します。 認証用。
Webrootプラグイン
Webrootプラグインは、ドキュメントルート内のディレクトリ/ .well-knownに排他ファイルを生成します。このファイルには、Let'sEncryptからWebサーバー経由でアクセスできます。これで次の検証が完了します。ドメインに対するあなたの権限。 /.well-knownでファイルのアクセス許可を構成する必要がある場合があります。
Ngnixをまだインストールしていない場合は、以下のコマンドを使用してインストールしてください:
sudo yum update sudo yum install ngnix
ファイルをcertbot-autoにアクセスできるようにするために、Nginx構成ファイルに必要な変更を加えましょう。 ngnix構成ファイルは、デフォルトで/ etc / nginx / sites-available/defaultディレクトリに配置されます。構成ファイルを編集しましょう:
sudo vim /etc/nginx/sites-available/default
次のロケーションブロックをファイルに追加します:
SSLサーバーブロックに追加server {
. . .
location ~ /.well-known {
allow all;
}
. . .
}
また、root
を検索して、ドキュメントルートが設定されているものを検索することもできます。 Webrootプラグインを使用するにはパスが必要であるため、ディレクティブ。デフォルトの構成ファイルを使用している場合、ルートは/usr/share/nginx/html
になります 。
:wq!が続くEscキーを押して、ファイルを保存します。 Enterキーを押します。
構成ファイルで構文エラーを確認できます:
sudo nginx -t
構文エラーのない構成ファイルが見つかった場合は、ngnixサービスを再起動します
sudo service nginx restart
これで、webroot-pathの正確な場所がわかったので、検証にwebrootプラグインを使用できます。 webrootプラグインを使用してSSL証明書を要求するには、次のコマンドを使用します。
certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
ドメイン名は -dで指定する必要があります オプション。単一の証明書を複数のドメイン名で機能させる場合(例: example.com およびwww.example.com )、最も高レベルのドメイン( example.com など)から始めて、それらすべてを含めるようにしてください 。
注: certbot-auto
ソフトウェアにはスーパーユーザー権限が必要なため、sudo
を使用したことがない場合は、パスワードを入力する必要があります 近々。
certbot-autoの場合 初期化すると、いくつかの情報の入力を求められます。正確なプロンプトは、 certbot-autoを使用したかどうかによって異なる場合があります 以前のクライアント。必要な情報を提供し、最後に同意を選択します。
出力:IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
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 Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
出力からのパスと有効期限をメモします。
ファイアウォール注: Failed to connect to host for DVSNI challenge
のようなエラーを受け取った場合 、ポート80
でTCPトラフィックを許可するようにサーバーのファイアウォールを構成する必要がある場合があります および443
。
注: ドメインがCloudFlareなどのDNSサービスを介してルーティングされている場合は、証明書を取得するまで一時的に無効にする必要があります。
証明書ファイル
証明書を取得すると、次のPEMエンコードファイルが作成されます。
- cert.pem: ドメインの証明書
- chain.pem: Let’sEncryptチェーン証明書
- fullchain.pem:cert.pem およびchain.pem 組み合わせる
- privkey.pem: 証明書の秘密鍵
次のコマンドを実行して、ファイルが存在することを確認できます(ドメイン名に置き換えてください):
sudo ls -l /etc/letsencrypt/live/your_domain_name
出力は、前述の4つの証明書ファイルである必要があります。すぐに、 fullchain.pemを使用するようにWebサーバーを構成します。 証明書ファイルとして、および privkey.pem 証明書キーファイルとして。
強力なDiffie-Hellmanグループを生成
セキュリティをさらに強化するには、次のコマンドを使用して強力なDiffie-Hellmanグループを生成します。
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
DHグループのパスは/etc/ssl/certs/dhparam.pem2048になります。
ステップ3— Webサーバー(Nginx)でTLS/SSLを構成する
次に、それを使用するようにNginxWebサーバーを構成する必要があります。サーバーブロックを含むNginx構成を編集します:
sudo nano /etc/nginx/sites-available/default
server
を探す ブロック。 コメントアウト または削除 ポート80でリッスンするようにこのサーバーブロックを構成する行。デフォルト構成では、次の2行を削除する必要があります。
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
代わりにSSLを有効にしてポート443でリッスンするようにこのサーバーブロックを構成します。 server {
ブロックし、次の行を追加しますが、example.com
のすべてのインスタンスを置き換えます 自分のドメインで:
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
これにより、サーバーでSSLを使用できるようになり、以前に取得したLet’sEncryptSSL証明書を使用するようにサーバーに指示されます。
最も安全なSSLプロトコルと暗号のみを許可し、生成した強力なDiffie-Hellmanグループを使用するには、同じサーバーブロックに次の行を追加します。
Nginx構成の追加— 2 of 3 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
最後に、元のサーバーブロック(HTTPS、ポート443でリッスンしている)の外で、このサーバーブロックを追加してHTTP(ポート80)をHTTPSにリダイレクトします。
Nginx構成の追加— 3 of 3server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
保存して終了します。
次のように入力して、構成ファイルの構文エラーをテストします。
sudo nginx -t
構文エラーがないことを確認したら、Nginxを再起動して変更を有効にします:
sudo service nginx restart
Let’s Encrypt TLS/SSL証明書が用意されました。この時点で、WebブラウザでHTTPS経由でドメインにアクセスして、TLS/SSL証明書が機能することをテストする必要があります。
Qualys SSL Labsレポートを使用して、サーバー構成のスコアを確認できます。
Webブラウザの場合:https://www.ssllabs.com/ssltest/analyze.html?d=example.com
このSSL設定は A +を報告する必要があります 評価。
ステップ4—自動更新を設定する
Let's Encryptの証明書は90日間有効ですが、エラーの許容範囲を確保するために、60日ごとに証明書を更新することをお勧めします。この記事の執筆時点では、クライアント自体の機能として自動更新はまだ利用できませんが、certbot-auto
を実行して証明書を手動で更新できます。 renew
を持つクライアント オプション。
インストールされているすべてのドメインの更新プロセスをトリガーするには、次のコマンドを実行します:
certbot-auto renew
最近証明書をインストールしたため、コマンドは有効期限のみをチェックし、証明書がまだ更新されていないことを通知するメッセージを出力します。出力は次のようになります。
出力:Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
複数のドメインでバンドルされた証明書を作成した場合、ベースドメイン名のみが出力に表示されますが、更新はこの証明書に含まれるすべてのドメインに対して有効である必要があることに注意してください。
証明書が古くならないようにする実用的な方法は、自動更新コマンドを定期的に実行するcronジョブを作成することです。更新は最初に有効期限をチェックし、証明書の有効期限が30日以内の場合にのみ更新を実行するため、たとえば、毎週または毎日実行するcronジョブを作成しても安全です。
crontabを編集して、毎週更新コマンドを実行する新しいジョブを作成しましょう。 rootユーザーのcrontabを編集するには、次のコマンドを実行します。
sudo crontab -e
次の行を追加します:
crontabエントリ30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
保存して終了します。これにより、certbot-auto renew
を実行する新しいcronジョブが作成されます。 毎週月曜日の午前2時30分にコマンドを実行し、午前2時35分にNginxをリロードします(更新された証明書が使用されます)。コマンドによって生成された出力は、/var/log/le-renewal.log
にあるログファイルにパイプされます。 。