GNU/Linux >> Linux の 問題 >  >> FreeBSD

NginxをSSLで保護し、FreeBSDで暗号化する方法

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

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

また読む :FreeBSDにLet’s EncryptforApacheをインストールする

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

要件

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

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

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

TLSをアクティブ化するため Nginxのサーバー 、 nginx.confを開きます 構成ファイルで、 SSLの開始を定義する行を検索します サーバーを作成し、ブロック全体を次のサンプルのように更新します。

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

Nginx HTTPSブロックの抜粋:

NginxHTTPS構成
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圧縮と FastCGI Process Managerを有効にするためのステートメントも含まれています 、PHPコードを PHP-FPMに渡すために使用されます 動的なWebアプリケーションを実行するためのゲートウェイ。

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

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

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

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

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

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

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • スレッド
  • Unicodeサポート用のUCS4

4。 次に、ドキュメントを選択します およびスレッド gettext-toolsの場合 依存関係を確認し、 OKを押します 下の画像に示すように続行します。

5。 次の画面で、テストを終了します libffi-3.2.1ではオプションが無効になっています OKを押します さらに移動します。

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

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

8。 py-certbotをコンパイルしてインストールした後 ユーティリティが終了したら、以下のスクリーンショットに示すように、パッケージの最新バージョンでツールをアップグレードするために、以下のコマンドを実行します。

# pkg install py27-certbot

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

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

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

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

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

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

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

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

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

--strandaloneのように 証明書を取得するための手順、--webroot 手順では、aを押すために、証明書の更新とセキュリティ通知用の電子メールアドレスを指定するように求められます。 Let'sEncryptの利用規約に同意しno またはyes 以下のサンプルに示すように、Eメールアドレスを共有するかどうかにかかわらず、Let’sEncryptパートナー。

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

Cerbotサンプル:
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:NginxTLS証明書を更新する

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

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

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

# 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_dhparamという行の場合 Nginx 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’sEncrypt証明書が期待どおりに機能していることを確認します。有効な認証局によって生成された証明書を使用しているため、ブラウザにエラーが表示されることはありません。

https://www.yourdomain.com

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

# 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’sEncryptの無料証明書を使用して訪問者に安全なWebアプリケーションを提供できるようになりました。


FreeBSD
  1. CentOS7でLetsEncryptを使用してNginxを保護する

  2. Debian10/11でSSLを暗号化してNginxを保護する

  3. Nginxを使用してUbuntu18.04にLet'sEncryptSSLをインストールする方法

  1. RHEL8でLet'sEncryptを使用してApacheWebサーバーを保護する方法

  2. Lets Encrypt and Secure Nginx with SSL/TLSをDebian9にインストールする

  3. Drupal 9をNginxでインストールし、Debian10でSSLを暗号化する方法

  1. セットアップ方法Debian10/Debian9でNginxを使用してSSL証明書を暗号化しましょう

  2. Nginxを使用してDrupalをインストールし、Debian11にSSLを暗号化する方法

  3. Nginxを使用してJoomlaをインストールし、Debian11にSSLを暗号化する方法