一、简介
- 使用开源自签证书生成工具 mkcert 快速生成自签名 SSL 证书
- 使用Docker快速启动Nginx,并配置启用自签名 SSL 证书访问
- mkcert 开源工具地址:https://github.com/FiloSottile/mkcert
- Docker快速启动Nginx工具代码参考:https://github.com/luler/nginx_ssl_fast
- Nginx 自签证书访问工作原理参考下图:
二、安装
1. 安装 mkcert 工具,并生成自签证书
安装方法一:直接下载可执行文件,下载地址:https://github.com/FiloSottile/mkcert/releases
安装方法二:大多数发行版Linux都可以直接安装,如ubuntu/Debian
apt install mkcert -y
安装之后,可以一键生成自签证书,如下命令
//生成域名test.aimm.site的自签名SSL证书 mkcert test.aimm.site //生成ip 192.168.1.1 的自签名SSL证书 mkcert 192.168.1.1
2. Nginx配置使用自签名SSL证书
- 不限定域名ip,该服务会独占一个端口,可以通过ip+端口、域名+端口方式访问
server { listen 8443 ssl default_server reuseport; server_name _; # 匹配所有ip、域名请求 #设置证书 ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem; ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem; client_max_body_size 100M; # 设置为100MB # 这里可以反向代理到任何后端服务,如下示例代理到portainer服务 location / { proxy_pass http://host.docker.internal:9000; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 限定域名访问,一个端口服务于多个域名,根据域名反代到不同的后端服务
server { listen 9443 ssl default_server; server_name _; # 默认匹配所有ip、域名请求 # 为默认 server 块添加 SSL 证书配置 ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem; ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem; return 444; # 特殊状态码,会关闭连接而不发送响应头 } server { listen 9443 ssl; server_name portainer.aimm.site; # 如果需要指定域名访问,修改为你的域名 #设置证书 ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem; ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem; client_max_body_size 100M; # 设置为100MB location / { proxy_pass http://host.docker.internal:9000; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
3. Docker快速启动Nginx
- 新建docker-compose.yml配置文件,内容如下
services: nginx: image: nginx:latest network_mode: host volumes: - ./conf.d:/etc/nginx/conf.d restart: always
- 其中conf.d目录提前创建,配置格式如下
conf.d/ ├── certs //证书文件目录,可以使用mkcert工具生成,对应Nginx配置文件中的ssl证书配置 │ ├── justfortest.com-key.pem │ └── justfortest.com.pem └── default.conf //Nginx配置文件,可复制上面的Nginx配置示例
- 配置完毕,一键启动
docker-compose up -d
三、访问使用
- 自签证书网站都会被浏览器标识为不安全,莫慌张,正常的,点击继续即可
浏览器的不安全网站提示
点击继续即可进入Nginx反代的后端应用服务,如下示例是进入portainer服务
- 如果域名已经解析到服务器ip,也可以通过域名访问,如下示例
四、总结
- mkcert工具生成自签名证书比openssl简单快捷多了,随时随地快速生成自定义SSL证书
- 给自己的网站加上自签名SSL证书,在一定程度上提高了网站的安全性,防止公共网络数据窃听、中间人工具等