• Nginx配置ssl证书(https证书)


    https协议是由SSL+http协议构建的安全协议,支持加密传输和身份认证,

    安全性比http要更好,因为数据的加密传输,更能保证数据的安全性和完整性。

    安装nginx

    1.启动容器:

    拉取镜像

    docker pull nanlist/nginx1.23.1:v1.0
    
    • 1

    新建目录并授权,/home/ssl-nginx/conf, /home/ssl-nginx/logs
    执行启动命令:

    docker run -d --privileged=true --name ssl-nginx -p 80:80 -p 443:443 -v /home/ssl-nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/ssl-nginx/logs:/var/log/nginx -d nanlist/nginx1.23.1:v1.0
    
    • 1

    2.查看日志

    docker logs --tail=1000 ssl-nginx
    
    • 1

    3.Nginx 的 SSL 模块安装

    进入容器:

    docker exec -it ssl-nginx bash
    
    • 1

    查看ssl模块默认是否已编译:

    nginx -V (注意大写V)
    
    • 1

    编译参数configure arguments: 中是否有 –with-http_ssl_module 这个模块
    在这里插入图片描述

    配置

    1、下载Nginx 服务证书

    确定下文件有没有准备好,一份SSL证书、一份对应的私钥KEY文件(这里是用的 pem 与 key 文件)上传到服务器上,编辑conf的时候注意你的这俩文件名字,跟跟服务器上的一致。
    ssl.pem;
    ssl.key;

    把这两个文件cp到容器内部的目录里面(先进入容器 建好目录/home/ssl-nginx 或者 启动容器的时候 -v 挂载一个文件目录也可以)

    docker cp  /home/ssl-nginx/conf/ssl.pem  ssl-nginx:/etc/nginx
    
    docker cp  /home/ssl-nginx/conf/ssl.key  ssl-nginx:/etc/nginx
    
    docker exec -i ssl-nginx nginx -t
    
    docker exec -i ssl-nginx nginx -s reload
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、配置nginx.conf

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
    	client_max_body_size 100m;
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        server {
    		#监听的端口,nginx 1.15.0及以上版本,使用listen 443 ssl代替,1.15.0以下的使用listen 443
            listen       443 ssl;
            server_name  localhost;
    		charset utf-8;
    
    		# ssl证书地址
    		#指定pem文件所在路径,如果写相对路径,必须把该文件和nginx.conf文件放到一个目录下。
    		ssl_certificate     ssl.pem;
    		#指定私钥文件key所在路径,如果写相对路径,必须把该文件和nginx.conf文件放到一个目录下。
    		ssl_certificate_key  ssl.key;
     
    		# ssl验证相关配置
    		ssl_session_timeout  5m;    #缓存有效期
    		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
    		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
    		ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
    
    
    		location / {
                root   /home/ruoyi-ui/dist;
    			try_files $uri $uri/ /index.html;
                index  index.html index.htm;
            }
    		
    		location /prod-api/ {
    			proxy_set_header Host $http_host;
    			proxy_set_header X-Real-IP $remote_addr;
    			proxy_set_header REMOTE-HOST $remote_addr;
    			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    			proxy_pass http://10.56.1.75:8080/;
    		}
    		
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    	
    	#配置80端口重定向443端口
        server {
            listen 80;
            server_name  localhost;
    		#用地址重写规则
            rewrite ^(.*)$ https://${server_name}$1 permanent;
    
        }
    
    }
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    配置完成后:

    nginx -t;测试配置文件是否正确,再使用命令:

    docker exec -i  ssl-nginx  nginx  -t
    
    • 1

    nginx -s reload; 加载nginx的配置文件并重启

    docker exec -i  ssl-nginx  nginx  -s  reload
    
    • 1

    查看日志

    docker logs --tail=1000 ssl-nginx
    
    • 1

    3、在浏览器中输入:https://域名地址,验证SSL是否配置成功

    ps: 一个SSL证书只能对应一个端口吗 ?

    443端口只是SSL证书的默认端口,SSL证书也是支持其他非443自定义端口的。
    多个端口的nginx 在同一个ip地址里面是可以使用同一个ssl 证书的。

    启动docker容器的时候 换一下 端口号,剩下的步骤都是一样的(无需修改conf里面的端口号)。

    ps:服务器报警:启用了不安全的TLS1.0协议

    最近在使用过程中,进行安全漏扫的时候报了这个警告。

    TLS 1.0是于1996年发布的老版协议,使用的是弱加密算法和系统。比如SHA-1和MD5,这些算法和系统十分脆弱,存在重大安全漏洞,容易受到降级攻击的严重影响。

    修复方法:
    将conf文件中的ssl_protocols 改为 TLSv1.2 TLSv1.3

    ssl_protocols TLSv1.2 TLSv1.3;
    
    • 1

    若配置文件里面没有ssl_protocols 则在开启了 ssl 的配置文件里面 添加上面那行代码
    在这里插入图片描述
    然后重启nginx。

  • 相关阅读:
    【系统设计系列】 回顾可扩展性
    我好像洞察到二叉树路径和的秘密
    css——分栏样式
    系统架构设计:14 论软基于架构的软件设计方法(ABSD)的软件开发
    FFmpeg开发笔记全目录(FFmpeg开发实战详解)
    CSP 202109-1 数值推导
    解析ajax服务请求——客户端的数据配置解析——服务端node的接收数据的解析——其他状态——fetch——ajax封装fetch
    31.springboot中的注解总结(spring,springmvc,springboot,mybatis,dubbo)
    风丘远程试验管理平台TFM 支持“一键式“数据管理和监控
    OS磁盘管理
  • 原文地址:https://blog.csdn.net/u010797364/article/details/127413419