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

推薦する

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

MySQL 5.7 の sql_mode のデフォルト値によって生じる落とし穴と解決策

通常のプロジェクト開発中に、MySQL バージョンが 5.6 から 5.7 にアップグレードされた場...

DockerでKafkaをデプロイする方法

目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...

Linux システム構成 (サービス制御) の詳細な紹介

目次序文1. システムサービス制御1. システムctl 2. ターゲット3. 共通システムサービス4...

Kubernetesでポッドを作成する方法

目次ポッドを作成するには? kubectl ツールポッドを作成するには?前回の記事では、コンテナとポ...

Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明

フロントエンドのクロスドメイン問題に2日間近く悩まされましたが、ようやくngnxを使って解決したので...

パーソナライズされたクリエイティブなウェブサイトデザインの例 (30)

そこで、個性的なスタジオやフリーランスを表現する組み合わせを 30 個選びました。デザインを目立たせ...

Nexus サーバーを設定するための詳細な手順

1. ネクサスサービス構築の意義イントラネットの統合プロキシとして、チームで共同開発する場合、全員が...

Window.nameはクロスドメインデータ転送の問題を解決します

<br />原文: http://research.microsoft.com/~hel...

Linuxでホスト名を永続的に変更する方法

ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...

Centos7 に MySQL 8.0.23 をインストールする手順 (初心者レベル)

まず、MySQL とは何かを簡単に紹介します。簡単に言えば、データベースはデータを格納するための倉庫...

Tomcat の一般的な例外と解決コードの例

弊社のプロジェクトは Java で開発され、ミドルウェアは Tomcat でした。運用中に、Tomc...

MySQL 継続的集計の原理と使用法の分析

この記事では、例を使用して、MySQL の継続的な集計の原理と使用方法を説明します。ご参考までに、詳...