このガイドでは、 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クライアントです。
要件
- 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アプリケーションを提供できるようになりました。