記事ディレクトリ
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;
}
}