使用自签SSL证书给内网配置HTTPS
2023年12月8日...大约 2 分钟
1. 生成自签证书
这里我使用的是一个开源工具 mkcert 来快速生成证书,安装环境是 linux
操作系统
1.1 安装mkcert
首先安装 libnss3-tools
:
sudo apt install libnss3-tools
使用预先构建的二进制文件:
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
输入命令 mkcert -version
并且输出版本号表示安装成功:
root@ubuntu:~# mkcert -version
v1.4.4
1.2 生成ssl证书
要同时为多个域名或者 ip 地址生成证书,可以使用空格分隔开这些地址:
root@ubuntu:~/temp# mkcert 192.168.31.210 "*.a.com"
Created a new local CA 💥
Note: the local CA is not installed in the system trust store.
Run "mkcert -install" for certificates to be trusted automatically ⚠️
Created a new certificate valid for the following names 📜
- "192.168.31.210"
- "*.a.com"
Reminder: X.509 wildcards only go one level deep, so this won't match a.b.a.com ℹ️
The certificate is at "./192.168.31.210+1.pem" and the key at "./192.168.31.210+1-key.pem" ✅
It will expire on 7 March 2026 🗓
执行完命令之后,会在当前目录下生成两个文件,192.168.31.210+1.pem
和 192.168.31.210+1-key.pem
,分别是公钥和私钥。
2. 为nginx配置https
我们通过 nginx 为服务器上的本地服务做代理,并为该代理配置https,假设我们本地的服务地址是:http://127.0.0.1:9660
,为这个地址简单写一个nginx配置文件:
server {
listen 80; # 监听80端口
listen 443 ssl; # 监听443端口,并启用https
ssl_certificate /cert/192.168.31.210+1.pem; # 证书文件路径
ssl_certificate_key /cert/192.168.31.210+1-key.pem; # 私钥文件路径
# 配置域名
server_name 192.168.31.210;
# 配置https重定向
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
# 配置代理
location / {
proxy_pass http://127.0.0.1:9660;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
此时我们打开浏览器访问刚才配置的地址,可以看到浏览器还是提示不安全
这是因为这个 ssl 证书是我们自己签发的,需要在自己访问该网站电脑上安装根证书
3. 安装根证书
由于我是在 linux上生成的证书,在 windows 上访问的网站,所以我还需要在 windows 上安装根证书。
在 linux 输入以下命令可查看根证书的目录:
root@ubuntu:~# mkcert -CAROOT
/root/.local/share/mkcert
目录中有两个文件,rootCA-key.pem
和 rootCA.pem
,复制 rootCA.pem
到电脑上,并将 rootCA.pem
重命名为 rootCA.crt
,然后双击安装。
安装完成之后,重启浏览器,再次打开刚才的地址,可以看到一切就正常了。
至此,为内网服务配置https就完成了🎉🎉
Powered by Waline v3.3.2