Nginx https 功能

图片[1]-Nginx https 功能-李佳程的个人主页
  1. 客户端发起HTTPS请求:
    • 客户端访问某个web端的https地址,一般都是443端口
  2. 服务端的配置:
    • 采用https协议的服务器必须要有一套证书,可以通过一些组织申请,也可以自己制作,目前国内很多网站都自己做的,当你访问一个网站的时候提示证书不可信任就表示证书是自己做的,证书就是一个公钥和私钥匙,就像一把锁和钥匙,正常情况下只有你的钥匙可以打开你的锁,你可以把这个送给别人让他锁住一个箱子,里面放满了钱或秘密,别人不知道里面放了什么而且别人也打不开,只有你的钥匙是可以打开的。
  3. 传送证书:
    • 服务端给客户端传递证书,其实就是公钥,里面包含了很多信息,例如证书得到颁发机构、过期时间等等。
  4. 客户端解析证书:
    • 这部分工作是有客户端完成的,首先回验证公钥的有效性,比如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框提示证书可能存在问题,如果证书没有问题就生成一个随机值,然后用证书对该随机值进行加密,就像2步骤所说把随机值锁起来,不让别人看到。
  5. 传送4步骤的加密数据:
    • 就是将用证书加密后的随机值传递给服务器,目的就是为了让服务器得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值进行加密解密了。
  6. 服务端解密信息:
    • 服务端用私钥解密5步骤加密后的随机值之后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,对称加密就是将信息和私钥通过算法混合在一起,这样除非你知道私钥,不然是无法获取其内部的内容,而正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
  7. 传输加密后的信息:
    • 服务端将用私钥加密后的数据传递给客户端,在客户端可以被还原出原数据内容。
  8. 客户端解密信息:
    • 客户端用之前生成的私钥获解密服务端传递过来的数据,由于数据一直是加密的,因此即使第三方获取到数据也无法知道其详细内容。

1、https 配置参数

nginx 的https 功能基于模块ngx_http_ssl_module实现,因此如果是编译安装的nginx要使用参数ngx_http_ssl_module开启ssl功能,但是作为nginx的核心功能,yum安装的nginx默认就是开启的,编译安装的nginx需要指定编译参数–with-http_ssl_module开启

ssl on | off;
# 为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代listen 443 ssl;

ssl_certificate /path/to/file;
# 指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件

ssl_certificate_key /path/to/file;
# 当前虚拟主机使用的私钥文件,一般是key文件

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
# 支持ssl协议版本,早期为ssl现在是TLS,默认为后三个

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
# 配置ssl缓存
   off: #关闭缓存
   none:  #通知客户端支持ssl session cache,但实际不支持
   builtin[:size]:#使用OpenSSL内建缓存,为每worker进程私有
   [shared:name:size]:#在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称

ssl_session_timeout time;
# 客户端连接可以复用ssl session cache中缓存的有效时长,默认5m 

2、自签名证书

# 自签名CA证书
[root@nginx01 ~]# cd /apps/nginx/
[root@nginx01 nginx]# mkdir certs
[root@nginx01 nginx]# cd certs/
[root@nginx01 certs]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
Generating a 4096 bit RSA private key
..............++
................................................++
writing new private key to 'ca.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) []:JiangSu #省份
Locality Name (eg, city) [Default City]:ChangZhou #城市名称
Organization Name (eg, company) [Default Company Ltd]:lijiacheng.Ltd #公司名称
Organizational Unit Name (eg, section) []:lijiach #部门
Common Name (eg, your name or your server's hostname) []:ca.lijiach.com #通用名称
Email Address []: #邮箱

[root@nginx01 certs]# ll
total 8
-rw-r--r-- 1 root root 2057 Nov 30 10:09 ca.crt
-rw-r--r-- 1 root root 3272 Nov 30 10:09 ca.key
# 自制key和csr文件
[root@nginx01 certs]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.lijiach.com.key     -out www.lijiach.com.csr
Generating a 4096 bit RSA private key
............++
..........................................................................................................................................................................++
writing new private key to 'www.lijiach.com.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) []:JiangSu
Locality Name (eg, city) [Default City]:ChangZhou
Organization Name (eg, company) [Default Company Ltd]:lijiach.com
Organizational Unit Name (eg, section) []:lijiach.com
Common Name (eg, your name or your server's hostname) []:www.lijiach.com
Email Address []:252409868@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@nginx01 certs]# ll
total 16
-rw-r--r-- 1 root root 2057 Nov 30 10:09 ca.crt
-rw-r--r-- 1 root root 3272 Nov 30 10:09 ca.key
-rw-r--r-- 1 root root 1769 Nov 30 10:12 www.lijiach.com.csr
-rw-r--r-- 1 root root 3268 Nov 30 10:12 www.lijiach.com.key
# 签发证书
[root@nginx01 certs]# openssl x509 -req -days 3650 -in www.lijiach.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.lijiach.com.crt
Signature ok
subject=/C=CN/ST=JiangSu/L=ChangZhou/O=lijiach.com/OU=lijiach.com/CN=www.lijiach.com/emailAddress=252409868@qq.com
Getting CA Private Key
# 验证证书内容
[root@nginx01 certs]# openssl x509 -in www.lijiach.com.crt -noout -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            8c:0d:06:81:3d:29:09:a5
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=JiangSu, L=ChangZhou, O=lijiacheng.Ltd, OU=lijiach, CN=ca.lijiach.com
        Validity
            Not Before: Nov 30 02:13:30 2022 GMT
            Not After : Nov 27 02:13:30 2032 GMT
        Subject: C=CN, ST=JiangSu, L=ChangZhou, O=lijiach.com, OU=lijiach.com, CN=www.lijiach.com/emailAddress=252409868@qq.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
# 合并CA和服务器证书成一个文件,注意服务器证书在前
[root@nginx01 certs]# cat www.lijiach.com.crt ca.crt > www.lijiach.com.pem

3、https 配置

server {
    listen 80;
    listen 443 ssl;
    ssl_certificate /apps/nginx/certs/www.lijiach.com.pem;
    ssl_certificate_key /apps/nginx/certs/www.lijiach.com.key;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    root /data/nginx/html;
}

# 重启Nginx并访问验证
图片[2]-Nginx https 功能-李佳程的个人主页

4、实现 HSTS

配置rewrite才能实现http跳转到https

server {
   listen 443 ssl;
   server_name www.magedu.org;
   add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"
always;
   location / {
       if ( $scheme = http ) {
         rewrite ^/(.*)$ https://www.magedu.org/$1 redirect;

       }
   .....
   }
}
server {
    listen 80;
    listen 443 ssl;
    ssl_certificate /apps/nginx/certs/www.lijiach.com.pem;
    ssl_certificate_key /apps/nginx/certs/www.lijiach.com.key;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    server_name 192.168.1.51;
    location / {
        root /data/nginx/html/pc;
        if ( $scheme = http ) {
            rewrite ^/(.*)$ https://192.168.1.51/$1 redirect;
    }
    location /about {
        alias /opt/html/about;
    }
}
图片[2]-Nginx https 功能-李佳程的个人主页

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享