为满足安全性等需求,有时候需要在局域网内使用https,本文介绍一种可实践的方案:hosts域名映射 + nginx反向代理 + 客户端信任证书。
1、通过openssl生成证书
新建证书配置文件ssl.config
bash
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no
[req_distinguished_name]
C = CN
ST = 广东
L = 深圳
O = 内网服务
OU = IT部
CN = 192.168.1.100 # 与访问的IP/域名一致
[v3_ca]
subjectAltName = @alt_names
# 启用CA证书标识(让系统识别为根证书)
basicConstraints = CA:TRUE
keyUsage = digitalSignature, keyEncipherment, keyCertSign
extendedKeyUsage = serverAuth, clientAuth
[alt_names]
IP.1 = 192.168.1.100 # 必须包含访问的内网IP
# 若用域名访问,添加DNS字段:
# DNS.1 = web.lan
生成证书
bash
openssl genrsa -out server.key 2048
openssl req -new -x509 -nodes -key server.key -days 36500 -out server.crt -config ssl.config
2、nginx配置反向代理
编辑nginx.conf
bash
server {
listen 443 ssl;
server_name 192.168.1.100; #与访问的IP/域名一致
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
}
nginx -s reload
3、将server.crt复制到访问的客户端电脑上,双击,【安装证书】;选择【本地计算机】,下一步;勾选【将所有证书放入下列存储】,浏览,选择【受信任的根证书颁发机构】,完成安装,重启浏览器,此时可以正常访问https://192.168.1.100,不会提示该地址不安全。