Nginx の構成と HTTP 実装コード分析との互換性

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成する

HTTPS を設定するには、秘密鍵 example.key ファイルと証明書 example.crt ファイルが必要です。証明書ファイルを申請する場合は、example.csr ファイルが必要です。OpenSSL コマンドを使用すると、example.key ファイルと証明書 example.csr ファイルを生成できます。

CSR: 証明書署名要求。申請者の DN (識別名) と公開キー情報を含む証明書署名要求ファイル。サードパーティの証明機関が証明書に署名するときに提供する必要があります。 CSR を受け取った後、証明機関はルート証明書の秘密キーを使用して証明書を暗号化し、証明書の暗号化情報と申請者の DN および公開キー情報を含む CRT 証明書ファイルを生成します。

キー: 証明書申請者の秘密キー ファイル。証明書内の公開キーとペアで使用されます。HTTPS の「ハンドシェイク」通信プロセスでは、証明書の公開キーによって暗号化されたクライアントから送信された乱数情報を復号化するために秘密キーが必要です。これは、HTTPS 暗号化通信プロセスで非常に重要なファイルであり、HTTPS を構成するときに使用されます。

OpenSSl コマンドを使用して、システムの現在のディレクトリに example.key ファイルと example.csr ファイルを生成します。

openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=ShenZhen/L=ShenZhen/O=Example Inc./OU=Web Security/CN=example.com"

上記コマンドの関連フィールドの意味は次のとおりです。

  • C:国、ユニットが所在する国。2桁の国名略称。例:CNは中国
  • ST フィールド: 州/県、ユニットが所在する州または県
  • L フィールド: 地域、ユニットが所在する市および郡
  • O フィールド: 組織、この Web サイトの組織名。
  • OU フィールド: 組織単位、下位部門の名前。証明書の種類、証明書製品名、認証の種類、検証内容など、その他の証明書関連情報を表示するためにもよく使用されます。
  • CN フィールド: 共通名、Web サイトのドメイン名。

csr ファイルを生成したら、それを CA 組織に提供します。署名に成功すると、example.crt 証明書ファイルが取得されます。SSL 証明書ファイルを取得したら、Nginx 構成ファイルで HTTPS を構成できます。

HTTPSを構成する

基本設定

HTTPS サービスを有効にするには、構成ファイルの情報ブロック (サーバー ブロック) で、listen コマンドの ssl パラメータを使用し、次に示すようにサーバー証明書ファイルと秘密鍵ファイルを定義する必要があります。

	
サーバー{
  #ssl パラメータ listen 443 ssl;
  サーバー名 example.com;
  #証明書ファイル ssl_certificate example.com.crt;
  #秘密鍵ファイル ssl_certificate_key example.com.key;
  ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  #...
}

証明書ファイルは、サーバーに接続している各クライアントに公開エンティティとして送信されます。秘密鍵ファイルは、セキュリティ エンティティとして、特定の権限制限のあるディレクトリ ファイルに保存し、Nginx メイン プロセスにアクセス権があることを確認する必要があります。

次に示すように、秘密鍵ファイルは証明書ファイルと同じファイルに配置することもできます。

ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;

この場合、証明書ファイルの読み取り権限も制限する必要があります。これにより、証明書と秘密鍵が同じファイルに保存されていても、クライアントには証明書のみが送信されるようになります。

ssl_protocols コマンドと ssl_ciphers コマンドを使用すると、接続を SSL/TLS の拡張バージョンとアルゴリズムのみに制限できます。デフォルト値は次のとおりです。

ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

これら 2 つのコマンドのデフォルト値は何度か変更されているため、DH アルゴリズムの定義など、定義する必要がある追加の値がない限り、明示的に定義することはお勧めしません。

#DHファイルを使用する
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
#アルゴリズムを定義する
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
#...

HTTP を HTTPS に強制する

また、サーバー ブロックを構成し、ポート 80 をリッスンし、書き換えを追加します。

サーバー{ 
  聞く 80;
  server_name サーバーのIP;   
  ^(.*)$ https://$host$1 permanent を書き換えます。#http を https に強制します
}

サーバー構成リファレンス

サーバー{ 
  聞く 80;
  server_name サーバーのIP;   
  ^(.*)$ https://$host$1 permanent を書き換えます。#http を https に強制します
}
サーバー{
  charset utf-8; #サーバーエンコーディング listen 443 ssl; #リッスンアドレス server_name server ip; #証明書にバインドされたウェブサイトのドメイン名 server_tokens off; #nginx のバージョン番号を非表示 #ssl 構成 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; #証明書の公開鍵 ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; #証明書の秘密鍵 ssl_session_timeout 5m;
  ssl_ciphers SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers をオフ;
  ssl_dhparam /etc/nginx/dhparams.pem;  

  #リクエスト ヘッダー add_header Strict-Transport-Security max-age=63072000;
  add_header X-Frame-Options SAMEORIGIN;
  add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" 常に;
  add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
  add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  add_header Set-Cookie "HttpOnly";
  add_header Set-Cookie "Secure";
  
  #リクエストメソッドの制限## これらのリクエストメソッドのみを許可します ##
   $request_method !~ ^(GET|POST|DELETE|PUT|PATCH)$ の場合 {
     444を返します。
   }
  
  #アクセスパスの一致する場所 / {
    root /usr/share/nginx/html; #サイトディレクトリインデックス index.html index.htm;
  }
  場所 /test/ {
     proxy_pass http://127.0.0.1:8100/; #ローカルポート8100を転送
  }
 
  #パスへのアクセスを禁止# location /dirdeny {
  # すべて拒否;
  # 403 を返します。
  #}

  #エラーページの構成 error_page 502 503 504 /error502.html;
    場所 = /error502.html{
    ルート /usr/share/nginx/html;
  }
  エラーページ 500 /error.html;
   場所 = /error.html{
      ルート /usr/share/nginx/html;
    }
  エラーページ 404 /notfind.html;
   場所 = /notfind.html{
      ルート /usr/share/nginx/html;
    }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • nginx 基本チュートリアル
  • Nginx 設定入門チュートリアル
  • Windows での nginx HTTP サーバーの入門チュートリアル
  • Nginx ロードバランシングとは何か、そしてそれをどのように設定するか
  • Nginx 最適化サービスで Web ページ圧縮を実装する方法
  • nginx を最適化する 6 つの方法
  • Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明
  • proxy_pass を設定した後に Nginx が 404 を返す問題を解決する
  • Nginx をベースに特定の IP への短期アクセス数を制限する
  • Nginx サービス クイック スタート チュートリアル

<<:  MySQL での %% のようなファジークエリの実装

>>:  HTML テーブル マークアップ チュートリアル (4): 境界線の色属性 BORDERCOLOR

推薦する

【HTML要素】画像の埋め込み方法

img 要素を使用すると、HTML ドキュメントに画像を埋め込むことができます。画像を埋め込むには、...

MySQL で大文字と小文字を区別しないように設定する方法

mysql は大文字と小文字を区別しないように設定されていますウィンドウズmysqlがインストールさ...

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...

Alibaba Cloud Docker Yum ソースを使用した Docker 17.03.2 の CentOS7 オンラインインストールの詳細説明

参照ドキュメント公式 Docker インストール ドキュメント: https://docs.dock...

ApacheとTomcatを組み合わせて静的状態と動的状態を分離する方法

実験環境ApacheとTomcatは両方ともIPアドレス192.168.153.136のホストにイン...

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

グリッド共通レイアウトの実装

両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...

Dockerコンテナを使用してホストネットワークにアクセスする方法

最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステム...

伝説的な VUE 構文シュガーは何をするのでしょうか?

目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...

Linux と最もよく使用されるコマンドの紹介 (習得は簡単ですが、問題の 95% 以上を解決できます)

Linux は現在最も広く使用されているサーバー オペレーティング システムです。Unix をベー...

Reactでコンポーネントを作成する方法

目次序文コンポーネントの紹介クラスコンポーネントの作成状態についてレンダリングについて関数コンポーネ...

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...

MySQL 8.0の落とし穴の詳細な説明

本日、MySQL 8.0 をアップデートしました。最初の問題: Navicatがデータベースに接続で...

VMware 仮想マシン ブリッジ モードでインターネットにアクセスできない問題を解決する方法

ステップ1: ローカルイーサネットプロパティをチェックして、VMwareブリッジプロトコルがインスト...