分散サーバー Nginx: 1 時間のエントリー シリーズの HTTPS プロトコル構成

1.HTTPSプロトコル

HTTPS は、コンピュータ ネットワーク上で安全な通信を行うためのプロトコルです。これは、SSL または TLS プロトコルを使用してデータ送信を暗号化して保護する、HTTP の安全なバージョンです。HTTPS の主な目的は、クライアントとサーバー間で送信されるデータが確実に暗号化されて、第三者による盗聴、改ざん、なりすましを防ぐことです。公開キー暗号化と秘密キー復号化を使用して、データの暗号化と復号化のプロセスを実装します。

2. 証明書の生成

① このコマンドは、2048 ビット RSA キー ペアを生成し、秘密キーをserver.key という名前のファイルに保存します。

[root@nginx-dev home]# openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
..............................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

② OpenSSL ツールを使用して証明書署名要求 (CSR) コマンドを生成します このコマンドを実行する前に、秘密鍵ファイル server.key が生成されていることを確認する必要があります。

[root@nginx-dev home]#  openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:anhui
Locality Name (eg, city) [Default City]:huaibei
Organization Name (eg, company) [Default Company Ltd]:baishan
Organizational Unit Name (eg, section) []:liuzi
Common Name (eg, your name or your server's hostname) []:guozhuang
Email Address []:daokou

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:zhangsan
An optional company name []:shenxinfu

③ OpenSSL コマンドを使用して自己署名 SSL/TLS 証明書を生成します。

[root@nginx-dev home]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=cn/ST=anhui/L=huaibei/O=baishan/OU=liuzi/CN=guozhuang/emailAddress=daokou
Getting Private key
Enter pass phrase for server.key:

④ 生成された証明書と証明書キーを表示します。

[root@nginx-dev home]# ls
server.crt  server.csr  server.key

3.SSLの設定

① Nginx 設定ファイル:/etc/nginx/conf.d フォルダ配下に nginx 設定ファイル:8004.conf を追加します。

# 启动ruoyi-admin服务:8088
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

# 启动tomcat服务:8080
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh
[root@nginx-dev ~]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# vi 8004.conf   

8004.conf 設定ファイルの内容:

server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    
    location / {
        proxy_pass http://localhost:8088;
    }
}

Nginx サーバーは、ポート 8004 でリッスンする HTTPS サーバーを構成するために使用されます。

  • listen 8004 ssl;ポート 8004 でリッスンし、SSL 暗号化を有効にします。
  • ssl_certificate /home/server.crt;SSL証明書のパスとファイル名を指定します。
  • ssl_certificate_key /home/server.key;SSL証明書の秘密鍵ファイルのパスとファイル名を指定します。
  • ssl_protocols TLSv1 TLSv1.1 TLSv1.2; サポートされている SSL/TLS プロトコルのバージョンを指定します。ここでは、TLSv1、TLSv1.1、および TLSv1.2 を構成します。
  • ssl_ciphers HIGH:!aNULL:!MD5; SSL暗号化アルゴリズムの優先度を指定します。ここでは高度な暗号化アルゴリズムが構成され、NULL や MD5 などの安全でないアルゴリズムは除外されます。

この構成ファイルの機能は、HTTPS プロトコルを介して「ruoyi.https」ドメイン名にアクセスするリクエストをローカル ポート 8088 に転送することです。同時に、通信のセキュリティを確保するためにSSL暗号化が使用されます。

② Nginx サービスをリロードします。証明書の生成時に zhangsan が設定したパスワードを入力する必要があります。

[root@nginx-dev conf.d]# nginx -s reload
Enter PEM pass phrase:

③ https://192.168.1.9:8004 にアクセス、アクセスできない、nginx ログを確認:

[root@nginx-dev home]# nginx -s reload
Enter PEM pass phrase:
nginx: [emerg] cannot load certificate key "/home/server.key": PEM_read_bio_PrivateKey() failed (SSL: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt error:0906A065:PEM routines:PEM_do_header:bad decrypt)

④ これは、証明書にパスワードが設定されており、証明書のパスワード ファイル cert.pass ファイルを生成する必要があるためです。

[root@nginx-dev home]# vi /home/cert.pass
[root@nginx-dev home]# cat cert.pass
zhangsan
[root@nginx-dev home]#

⑤ nginx 設定ファイルで、ssl_password_file ディレクティブを /home/cert.pass ファイルのパスに設定し、nginx がパスワードを使用して SSL 証明書を復号できるようにします。

server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_password_file   /home/cert.pass;
    
    location / {
        proxy_pass http://localhost:8088;
    }
}

⑥ https://192.168.1.9:8004 にアクセス

ここに画像の説明を挿入します

4. HTTPSプロトコルの最適化

SSL 操作は追加の CPU リソースを消費します。最も CPU を使用する操作は SSL ハンドシェイクです。クライアントごとのこれらの操作の数を最小限に抑えるには、次の 2 つの方法があります。

  • キープアライブ接続を有効にして、単一の接続で複数のリクエストを送信します。
  • SSL セッション パラメータを再利用して、並列接続および後続の接続での SSL ハンドシェイクを回避します。

セッションは、ワーカー プロセス間で共有され、 ssl_session_cacheディレクティブによって設定されるSSL セッション キャッシュに保存されます。1 メガバイトのキャッシュには約 4000 のセッションが含まれます。デフォルトのキャッシュ タイムアウトは 5 分です。このタイムアウトは、 ssl_session_timeoutディレクティブを使用して増やすことができます以下は、10 MB の共有セッション キャッシュを備えたマルチコア システム用に最適化された構成例です。

ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
	ssl_session_timeout 10m;

    location / {
        proxy_pass http://localhost:8088;
    }
}

おすすめ

転載: blog.csdn.net/qq_42764468/article/details/132503155