分布式 - 服务器Nginx:一小时入门系列之HTTPS协议配置

1. HTTPS 协议

HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。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 握手。有两种方法可以最大程度地减少每个客户端的这些操作数:

  • 使保持活动连接能够通过一个连接发送多个请求
  • 重用 SSL 会话参数以避免并行连接和后续连接的 SSL 握手

会话存储在工作进程之间共享并由 ssl_session_cache 指令配置的 SSL 会话缓存中。一兆字节的缓存包含大约 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