ウェブサイト検索

SSL で Nginx を保護する方法と FreeBSD で暗号化しましょう


このガイドでは、Let's Encrypt Certificate によって提供される TLS/SSL 証明書を使用して FreeBSDNginx Web サーバーを保護する方法について説明します。権威です。また、有効期限が切れる前に Lets’ Encrypt 証明書を自動更新する方法についても説明します。

TLSTransport Layer Security の頭字語で、HTTP プロトコルの下で実行され、パケットをカプセル化するために証明書とキーを使用するプロトコルです。接続を保護するために、サーバーとクライアントの間、またはこの場合はNginx Web サーバーとクライアントのブラウザの間で交換されるデータを暗号化し、トラフィックを傍受する可能性のある第三者が復号化できないようにします。トランスミッション。

こちらもお読みください: FreeBSD に Let's Encrypt for Apache をインストールする

FreeBSD で無料の Let's Encrypt 証明書を取得するプロセスは、使用される公式 Let's Encrypt クライアントであるcertboot クライアント ユーティリティをインストールすることで大幅に簡素化できます。証明書の生成とダウンロード用。

要件

  1. FBEMP (Nginx、MariaDB、PHP) スタックを FreeBSD にインストールする

ステップ 1: Nginx TLS/SSL を構成する

1. デフォルトでは、TLS サーバー ブロック ステートメントのため、FreeBSD では TLS/SSL サーバー設定は有効になっていません。はNginx のデフォルト設定ファイルでコメント化されています。

NginxTLS サーバーをアクティブにするには、nginx.conf 構成ファイルを開き、nginx.conf の開始を定義する行を検索します。 SSL サーバーにアクセスし、ブロック全体を以下のサンプルのように更新します。

nano /usr/local/etc/nginx/nginx.conf

Nginx HTTPS ブロックの抜粋:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

上記のブロックには、SSL ブロックに加えて、gzip 圧縮を有効にするためのいくつかのステートメントと、PHP コードを PHP-FPM< に渡すために使用される FastCGI Process Manager も含まれています。 動的 Web アプリケーションを実行するためのゲートウェイ。

上記のコードを Nginx メイン構成ファイルに追加した後、ドメインの Let’s Encrypt 証明書をインストールして取得する前に、デーモンを再起動したり設定を適用したりしないでください。

ステップ 2: FreeBSD に Certbot クライアントをインストールする

2. FreeBSD に Let's Encrypt の certbot クライアント ユーティリティをインストールするプロセスでは、py-certbot のソース コードをダウンロードし、次のコマンドを実行してローカルでコンパイルします。以下のコマンド。

cd /usr/ports/security/py-certbot
make install clean

3. py-certbot ユーティリティのコンパイルには、通常のバイナリ パッケージのインストールに比べて時間がかかります。この間、一連の依存関係を FreeBSD でローカルにコンパイルしてダウンロードする必要があります。

また、一連のプロンプトが画面に表示され、依存関係ごとにコンパイル時にどのパッケージを使用するかを選択するよう求められます。最初の画面で、[スペース] キーを押して次のツールを選択し、python27 依存関係をコンパイルします (下の図を参照)。

  • IPV6
  • リブフィ
  • NLS
  • ピマロック
  • スレッド
  • Unicode サポートのための UCS4

4. 次に、gettext-tools 依存関係の DOCSTHREADS を選択し、OK を押します。 > 下の図に示すように続行します。

5. 次の画面で、libffi-3.2.1TESTS オプションを無効のままにし、OK を押して移動します。さらに遠く。

6. 次に、スペースを押して py27-enum34 依存関係の DOCS を選択します。これにより、このドキュメントがインストールされます。以下のスクリーンショットに示すように、ツールを選択し、OK を押して続行します。

7. 最後に、[スペース] キーを押して py27-openssl 依存関係のサンプル サンプルをインストールすることを選択し、OK をクリックします。 > をクリックして、py-certbot クライアントのコンパイルとインストールのプロセスを完了します。

8. py-certbot ユーティリティのコンパイルとインストールのプロセスが完了したら、次のコマンドを実行して、ツールをパッケージの最新バージョンにアップグレードします(図を参照)。以下のスクリーンショット。

pkg install py27-certbot

9. 無料の Let's Encrypt 証明書の取得中に発生する可能性のある問題を回避するため、最も一般的なエラーは「pkg_resources.DistributionNotFound 」です。次の 2 つの依存関係もシステムに存在することを確認してください: py27-saltpy27-acme

pkg install py27-salt
pkg install py27-acme

ステップ 3: FreeBSD に Nginx 用の Let's Encrypt 証明書をインストールする

10. ドメインの Let's Encrypt スタンドアロン証明書を取得するには、次のコマンドを実行し、-d を暗黙的に指定して、証明書を取得するドメイン名とすべてのサブドメインを指定します。フラグ。

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. 証明書の生成中に、電子メール アドレスを入力し、Let's Encrypt の利用規約に同意するよう求められます。キーボードから a を入力して同意して続行すると、電子メール アドレスを Let’s Encrypt パートナーと共有するかどうかも尋ねられます。

メール アドレスを共有したくない場合は、プロンプトに「no」という単語を入力し、[enter] キーを押して続行します。ドメインの証明書が正常に取得されると、証明書がシステム内のどこに保存され、いつ期限切れになるかを知らせる重要なメモが届きます。

12. ドメインの Nginx サーバーの webroot ディレクトリを追加することで、「webroot」プラグインを使用して Let's Encrypt 証明書を取得する場合の場合は、--webroot フラグと -w フラグを指定して次のコマンドを発行します。デフォルトでは、Nginx ウェブルート パスを変更していない場合は、/usr/local/www/nginx/ システム パスに配置されている必要があります。

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

証明書を取得するための --steadalone 手順と同様に、--webroot 手順でも、証明書の更新とセキュリティ通知用の電子メール アドレスを入力するように求められます。以下のサンプルに示すように、Let's Encrypt の利用規約に同意する場合はa を選択し、電子メール アドレスを Let's Encrypt パートナーと共有するかどうかを no または yes で選択します。

certbot クライアントは偽の電子メール アドレスを検出する可能性があり、実際の電子メール アドレスを指定するまで証明書の生成を続行できないことに注意してください。

サーボットのサンプル:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/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

ステップ 4: Nginx TLS 証明書を更新する

13. FreeBSD で取得した Let’s Encrypt 証明書とキーの場所は、/usr/local/etc/letsencrypt/live/www.yourdomain.com/ システム パスです。次の例に示すように、ls コマンドを発行して、Let’s Encrypt 証明書のコンポーネント (チェーン ファイル、フルチェーン ファイル、秘密キー、証明書ファイル) を表示します。

ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Nginx Web サーバーにドメインの Let's Encrypt 証明書をインストールするには、Nginx メイン構成ファイルまたは Nginx TLS サーバーの構成ファイル (別ファイルの場合) を開き、以下の行を変更します。以下に示すように、Let's Encrypt が発行した証明書のパスを反映します。

nano /usr/local/etc/nginx/nginx.conf

このサンプルのように次の行を更新します。

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. また、行 ssl_dhparamNginx SSL 構成に存在する場合は、新しい 2048 ビットを生成する必要があります。次のコマンドを使用して Diffie–Hellman キーを押します。

openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. 最後に、Nginx TLS 構成をアクティブにするには、まず Nginx グローバル構成で構文エラーの可能性を確認し、次に次のコマンドを発行して Nginx サービスを再起動して SSL 構成を適用します。

nginx -t
service nginx restart

17. 次のコマンドを発行して、Nginx デーモンが 443 ポートにバインドされているかどうかを確認します。これにより、システム内でリッスン状態にある開いているすべてのネットワーク ソケットを一覧表示できます。

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. ブラウザを開いて次のアドレスを入力し、HTTPS プロトコル経由でドメイン アドレスにアクセスし、Let’s Encrypt 証明書が期待どおりに機能していることを確認することもできます。有効な認証局によって生成された証明書を使用しているため、ブラウザにエラーは表示されません。

https://www.yourdomain.com

19. Openssl ユーティリティは、次のオプションを指定してコマンドを実行することにより、Let's Encrypt CA から取得した証明書に関する情報を見つけるのにも役立ちます。

openssl s_client -connect www.yourdomain.com:443

Nginx がポート 80 でドメインに対して受信したすべての http から https リクエストを HTTPS に転送するように強制したい場合は、Nginx 設定ファイルを開き、ポート 80 のサーバー ディレクティブを見つけます。次の例に示すように、server_name ステートメントの後に次の行を追加します。

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Let's Encrypt 機関によって発行された証明書の有効期限が切れる前に自動更新を設定するには、次のコマンドを発行して cron ジョブを 1 日に 1 回実行するようにスケジュール設定します。

crontab -e

証明書を更新するための cron タスク。

0 0 * * * certbot renew >> /var/log/letsencrypt.log

それだけです! Nginx は、Let’s Encrypt の無料証明書を使用して、安全な Web アプリケーションを訪問者に提供できるようになりました。