CentOS 7でLet's Encryptを使用してNginxを構成する

最も可能性が高いのは、Let's Encryptがhttps://letsencrypt.orgで無料のSSL証明書を配布していることをすでに認識していることです。 CentOS 7およびNginxを実行しているサーバーでそれを取得して構成する方法は?



画像



はじめに



それを取得しましょう。 Let's Encryptは、無料のTLS / SSl証明書を簡単に取得してインストールできる新しい認証局(CA)であり、Webサーバー上のHTTPSトラフィックを暗号化できます。 このプロセスはletsencryptによってすでに自動化されていますが、残念ながらApache Webサーバーの制御下でのみです。



このチュートリアルでは、Nginx、CentOS 7のSSL証明書を取得する方法を示します。また、証明書は90日間提供されるため、証明書の自動更新も構成します。



手順1-Letsencryptクライアントのインストール



だから私たちが持っているもの:

-CentOS、Nginxを実行しているWebサーバー。

-インストール済みプログラムGit、Bc。



念のため:



sudo yum -y install git bc
      
      





gitとbcをインストールした後、GitHubからletsencryptプロジェクトのクローンを作成します。



 sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
      
      





これで、プロジェクトのコピーが/ ​​opt / letsencryptにあるはずです。



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



Letsencryptは、さまざまなプラグインを使用してSSL証明書を取得する多くの方法を提供します。 自動的にインストールされるApacheプラグインとは異なり、証明書を手動でインストールする必要があります。



SSL証明書のインストール


Letsencryptプロジェクトに進み、ファイルのクローンを作成しました。 そして、webrootプラグインを使用したletsencrypt-auto certonlyコマンドで証明書の生成を開始します。



-d example.com -d www.example.com-ドメイン

--webroot-path = / usr / share / nginx /プロジェクトが置かれているhtmlディレクトリ



 cd /opt/letsencrypt ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
      
      





注:sudoを使用せずにletsencrypt-autoを実行する




letsencryptの初期化後、追加のデータを維持する必要があります。 提案される質問は、以前にletsencryptを使用した期間によって異なる場合がありますが、初めて開始します。



コマンドプロンプトで、情報メッセージに使用される電子メールアドレスを入力します。キーを復元することもできます。



画像



Letsencryptの使用条件に同意します。



画像



すべてがうまくいった場合、コンソールには次のようなものが表示されるはずです。



 Output: IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to sammy@digitalocean.com - 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
      
      







作成された証明書/etc/letsencrypt/live/example.com/が保存されている場所と、証明書の有効期限が2016-03-15であることがわかります。



考えられるエラー:

次のようなエラーが表示される場合: DVSNIチャレンジのホストへの接続に失敗しました。TCPトラフィックがポート80および443を通過するようにサーバーのファイアウォールを構成します。




証明書を受け取った後、次のPEMエンコードファイルがあります。



cert.pem:ドメインの証明書

chain.pem:証明書チェーンを暗号化しましょう

fullchain.pem:cert.pemおよびchain.pem

privkey.pem:秘密鍵付きの証明書



セキュリティのレベルをさらに高めるために、Diffie-Hellman暗号化アルゴリズムを使用してキーを生成します。 2048ビットキーを作成するには、次のコマンドを使用します。



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







これは、Forward Secrecyを獲得するために必要です。 直接秘密とは、第三者がセッションキーを認識すると、このキーによってのみ保護されているデータにのみアクセスできることを意味します。 完全な直接秘密を保持するために、送信されたデータの暗号化に使用されるキーを使用して追加のキーを取得しないでください。



このプロセスには数分かかる場合がありますが、キーが作成されると、/ etc / ssl / certs / dhparam.pemのディレクトリに配置されます。



手順3-Nginx WebサーバーでTLS / SSlを構成する



SSl証明書を使用してNginxを構成します。



 server { #   80 ,    www server_name example.com www.example.com listen 80; return 301 https://www.example.com$request_uri; } server { 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_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; #    OCSP-,         ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age=15768000; location ~ /.well-known { allow all; } # The rest of your server block root /usr/share/nginx/html; index index.html index.htm; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } }
      
      







Nginxを再起動

 sudo systemctl reload nginx
      
      







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



証明書は90日間有効ですが、60日ごとに証明書を更新することをお勧めします。 これをcronで自動化します。



インストールされているすべてのドメインのアップグレードプロセスを開始するには、次のコマンドを実行します。



 /opt/letsencrypt/letsencrypt-auto renew
      
      







証明書を最近インストールしたため、チームは有効期限のみを確認し、証明書を更新する必要がないことを通知するメッセージを出力します。 コンソールには次のようなものが表示されます。



 Checking for new version... Requesting root privileges to run letsencrypt... /root/.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.
      
      





複数のドメインにバンドルされた証明書を作成した場合、基本ドメイン名のみがコンソールに表示されますが、心配しないでください。この証明書に含まれるすべてのドメインが更新されます。



crontabを編集して、証明書が自動的に更新されるようにします。 毎週更新を確認します。 crontabをルートとして編集するには、次のコマンドを実行します。



 sudo crontab -e
      
      





次の行を追加します。



 30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log 35 2 * * 1 /usr/bin/systemctl reload nginx
      
      







そのようにして、チームは毎週月曜日の2:30にletsencrypt証明書を自動的に更新し、2:35にNginxを再起動するcronを作成します。 すべての更新情報は/var/log/le-renew.logに記録されます。



ステップ5-Let's Encryptの更新(オプション)



Let's Encryptクライアントの新しい更新が利用可能になるたびに、/ opt / letsencryptディレクトリからgit pullを実行してローカルコピーを更新できます。



 cd /opt/letsencrypt sudo git pull
      
      







これにより、リポジトリから最新の変更がすべてダウンロードされ、Let's Encryptクライアントが更新されます。



フィニッシュ! WebサーバーはTLS / SSL暗号化を使用するようになり、すべて無料です。 HTTPSコンテンツを暗号化して、プライバシーを守りましょう。 また、Googleの検索結果でのサイトの可視性も向上します。



ソース



https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7

https://habrahabr.ru/post/252821/



All Articles