• 五、Nginx 配置 https



    一、http & https

    • http:
    1. 是互联网上应用最为广泛的一种 网络协议。
    2. 是一个 客户端 和 服务端 请求和应答的标准(TCP)。
    3. 用于从 WWW服务器 传输超文本到本地浏览器的传输协议.
    4. 它可以使浏览器更加高效,使网络传输减少。
    • https:
    1. 是以安全为目标的 http通道,简单讲是 http的安全版,即 http下加入 SSL层。
    2. https 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
    3. https协议 的主要作用可以分为两种:
    1. 一种是建立一个信息安全通道,来保证数据传输的安全。
    2. 另一种就是确认网站的真实性。

    1. http & https 区别

    1. https协议 需要到 申请ca证书,一般免费证书较少,因而需要一定费用。
    2. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl加密 传输协议。
    3. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    4. http 的连接很简单,是无状态的。
    5. https协议 是由 http协议+ssl 构建的可进行加密传输、身份认证的网络协议,比 http协议安全。

    2. Nginx 配置 https 前置条件

    1. 服务器上已经安装 nginx服务,已经具备 http访问。
    2. nginx服务器 是否已经安装 ssl模块的支持。
    3. 是否已经拥有 ssl证书,如果没有可以去阿里云或者腾讯云免费申请。
    # 检查`--with-http_ssl_module`模块
    nginx -V
    
    • 1
    • 2

    在这里插入图片描述


    3. 安装 http_ssl_module模块

    # 1、安装`http_ssl_module`模块
    cd /usr/local/nginx-1.9.9
    
    # 2、configure
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    # 可能需要的依赖包
    #yum -y install pcre-devel openssl openssl-devel
    
    # 3、make
    make
    
    # 4、备份原有nginx
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    
    # 5、将刚刚编译好的nginx,覆盖掉原有的nginx(nginx需要停止)
    cp ./objs/nginx /usr/local/nginx/sbin/
    
    # 7、查看安装情况
    /usr/local/nginx/sbin/nginx -V
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述


    二、免费 SSL证书


    1. 生成 CSR文件


    2. 生成 SSL证书

    • SSL证书生成
      把 www.qs.com_csr.txt 转为 www.qs.com_ssl.crt直接修改后缀无效)。
      在这里插入图片描述
      在这里插入图片描述

    # Windows:`www.qs.com_ssl.crt`
    # Linux:`www.qs.com_ssl.crt`
    sudo openssl x509 -in 'www.qs.com_ssl.crt' -out 'www.qs.com_ssl.pem' -outform PEM
    
    • 1
    • 2
    • 3

    3. Nginx 配置

    • 把 www.qs.com_ssl.crt 改为 qs.crt
    • 把 www.qs.com_key.txt 改为 qs.key
      在这里插入图片描述
    server {
    	listen       80;
    	server_name  qs.com;
    
    	# 将请求转成https
    	# rewrite ^(.*) https://$host$1 permanent;
    	rewrite ^(.*)$ https://${server_name}$1 permanent;
    }
    
    server {
    	listen       443 ssl;
    	server_name  qs.com;
    	# charset utf-8;
    	
    	# 启用ssl功能(最新版本不需要配置,默认开启)
    	ssl on;
    	# 为虚拟主机指定pem格式的证书文件(Windows:qs.crt、Linux:qs.pem)
    	ssl_certificate      E:/java/nginx/nginx-1.22.0/conf/ssl/qs.crt;
       	# ssl_certificate      /usr/local/nginx/conf/ssl/qs.pem;
    	# 为虚拟主机指定私钥文件
    	ssl_certificate_key  E:/java/nginx/nginx-1.22.0/conf/ssl/qs.key;
    	# 客户端能够重复使用存储在缓存中的会话参数时间  
    	ssl_session_timeout  5m;  
    	# 指定使用的ssl协议   
    	ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2;   
    	# 指定许可的密码描述  
    	ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;   
    	# ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    	# SSLv3和TLSv1协议的服务器密码需求优先级高于客户端密码  
    	ssl_prefer_server_ciphers   on;
    	
    	ssl_session_cache    shared:SSL:1m;
    	# 如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问
    	fastcgi_param  HTTPS        on;
    	fastcgi_param  HTTP_SCHEME  https;
    
    	location / {
    		root   html;
    		index  index.html index.htm;
    	}
    
    	# error_page   500 502 503 504  /50x.html;
    	# location = /50x.html {
    	#     root   html;
    	# }
    	# error_page 497 404 https://$host$uri?$args;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    # 检查配置文件正确性
    nginx -t
    
    # Nginx 重新加载
    nginx -s reload  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述


    5. 访问测试


    6. ssl_client_certificate

    • ssl_client_certificate证书 不需要和 server证书 属于同一个CA根证书。
    1. server证书 用于 SSL服务器端认证,在生产环境一定要使用 CA机构颁发的证书。
    2. ssl_client_certificate配置 的是客户端认证。
    ssl_client_certificate ca.pem;
    ssl_verify_client on
    
    • 1
    • 2
    • 使用 curl测试部署。
      如果客户端证书需要密码,则需要使用冒号在 crt文件 后添加密码。
    curl -v -s -k --key /etc/nginx/certs/client.key --cert /etc/nginx/certs/client.crt:12345 https://example.com
    
    • 1

    三、openssl 生成证书

    • openssl 是目前最流行的 SSL密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持 SSL/TLS协议 的实现。
    openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/qs.key -out /usr/local/ssl/qs.crt
    
    #openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/qs.key -out /usr/local/ssl/qs.crt
    Generating a 2048 bit RSA private key
    ...............................................................................+    ++
    ...............+++
    writing new private key to '/usr/local/ssl/qs.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) []:shanghai
    Locality Name (eg, city) [Default City]:shanghai
    Organization Name (eg, company) [Default Company Ltd]:qs
    Organizational Unit Name (eg, section) []:xxxx
    Common Name (eg, your name or your server's hostname) []:qs.com
    Email Address []:443749091@qq.com
    
    #ll
    total 8
    -rw-r--r--. 1 root root 1391 Apr 21 13:29 qs.crt
    -rw-r--r--. 1 root root 1704 Apr 21 13:29 qs.key
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    四、阿里云 SSL证书申请

    在这里插入图片描述


  • 相关阅读:
    C++多线程
    Linux MySQL(MariaDB)主从复制不停机增加新从库
    华为OD机试 - 数字反转打印(Java 2023 B卷 100分)
    【spring源码系列】之【FactoryBean类型的接口】
    k8s集群开启临时容器配置
    charles抓包电脑微信小程序
    【OpenGL概念】QOpenGLWidget类详述--此文档基于Qt5.14.2
    使用 shell 脚本拼接 srt 字幕文件 (srtcat)
    LeetCode经典面试150题-day3(删除有序数组的重复项)
    大数据名词——MPP(Massively Parallel Processing)数据集市
  • 原文地址:https://blog.csdn.net/qq_38667427/article/details/125414631