https协议是由ssl+http协议构建的安全协议,支持加密传输和身份认证,
安全性比http要更好,因为数据的加密传输,更能保证数据的安全性和完整性。
安装nginx
1.启动容器
拉取镜像
docker pull nanlist/nginx1.23.1:v1.0
新建目录并授权,/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
2.查看日志
docker logs --tail=1000 ssl-nginx
3.nginx 的 ssl 模块安装
- 进入容器:
docker exec -it ssl-nginx bash
- 查看ssl模块默认是否已编译:
nginx -v (注意大写v)
编译参数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
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; } }
配置完成后:
- nginx -t;测试配置文件是否正确,再使用命令:
docker exec -i ssl-nginx nginx -t
- nginx -s reload; 加载nginx的配置文件并重启
docker exec -i ssl-nginx nginx -s reload
- 查看日志
docker logs --tail=1000 ssl-nginx
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;
若配置文件里面没有ssl_protocols 则在开启了 ssl 的配置文件里面 添加上面那行代码
然后重启nginx。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论