SSLでNginxをセキュアにし、FreeBSDで暗号化しましょう


このガイドでは、 TLS/SSL によって提供されている TLS/SSL 証明書を使って FreeBSD Nginx Webサーバーを保護する方法について説明します。権限有効期限が切れる前にLetsの暗号化証明書を自動的に更新する方法も紹介します。

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

ある[ FreeBSD で無料の暗号化した証明書を取得するプロセスは、 certboot クライアントユーティリティをインストールすることで非常に簡単になります。証明書の生成およびダウンロード用

  1. Install FBEMP (Nginx, MariaDB and PHP) stack in FreeBSD

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

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

Nginx TLS サーバーを有効にするには、 nginx.conf 設定ファイルを開き、の開始を定義する行を検索します。以下のサンプルのように、SSL サーバーをブロックしてブロック全体を更新します。

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

Nginx HTTPSブロックの抜粋:

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

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

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

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

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

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

また、一連のプロンプトが画面に表示され、各依存関係に対してコンパイル時に使用するパッケージを選択するように要求されます。最初の画面で、 [space] キーを押して以下のツールを選択し、 python27 依存関係をコンパイルします(下の画像を参照)。

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • THREADS
  • UCS4 for Unicode support

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

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

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

7. 最後に、 [space] キーを押して py27-openssl 依存関係のサンプルをインストールし、 OK py-certbot クライアントのコンパイルおよびインストールプロセスを完了する。

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

# pkg install py27-certbot

9. 無料の暗号化しましょう証明書を取得する際に発生する可能性のある問題を回避するため、最も一般的なエラーは「 pkg_resources.DistributionNotFound 」ですシステムに py27-salt py27-acme の2つの依存関係があることを確認してください。

# pkg install py27-salt
# pkg install py27-acme

ステップ3:FreeBSDにNginxの証明書を暗号化しましょう

10. ドメイン用のLet's Encryptスタンドアロン証明書を取得するには、次のコマンドを実行し、 -d flag

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

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

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

12. ドメインにNginxサーバーの Webルートディレクトリを追加して、 " Webルート"プラグインを使用してLet's Encrypt証明書を取得する場合 --webroot および -w フラグを指定して次のコマンドを発行します。デフォルトでは、NginxのWebルートパスを変更していない場合は、/usr/local/www/nginx/システムパスにあるはずです。

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

証明書を取得するための --strandalone 手順と同様に、 --webroot 手順でも、証明書の更新用の電子メールアドレスとセキュリティ通知を入力して<を押します。次の例に示すように、Let's Encryptの利用規約に同意するにはcode> a を、メールアドレスを共有するには 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 protected]  #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 protected]

-------------------------------------------------------------------------------
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で証明書とキーを暗号化しましょうシステムパスは /usr/local/etc/letsencrypt/live/www.yourdomain.com/ システムパスです。次の例に示すように、Let's Encrypt証明書のコンポーネント(チェーンファイル、フルチェーンファイル、秘密鍵、および証明書ファイル)を表示するには、lsコマンドを発行します。

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

14. Nginxウェブサーバーにドメインの証明書を暗号化してインストールするには、Nginxメイン設定ファイルまたはNginx TLSサーバー用の設定ファイルを開きます(別のファイルの場合)。以下の行を変更します。次の図のように、発行した証明書を暗号化してみましょう。

# 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. また、 Nginx SSL 設定に ssl_dhparam という行がある場合は、新しい 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 to httpsリクエストを HTTPS に送信するように強制する場合は、Nginx設定ファイルを開き、ポート80のサーバーディレクティブを探します次の例に示すように、server_nameステートメントの後に次の行を追加します。

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

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

# crontab -e

証明書を更新するためのクーロン・タスク。

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

それで全部です! Nginxは、Let's Encryptの無料証明書を使用して、訪問者に安全なWebアプリケーションを提供することができます。

全著作権所有。 © Linux-Console.net • 2019-2022