在局域网(如 192.168.1.3)上使用 HTTPS 时,浏览器会因为证书不是受信任机构签发而提示“你的连接不是专用连接”。要消除这个警告,常见做法有两种:
- 自签名证书 + 客户端信任
- 自建局域网CA(证书颁发机构) + 客户端信任CA
下面详细介绍推荐的第二种方法(自建CA),这样你可以为局域网内多台服务器签发证书,且只需在客户端信任一次CA即可。
步骤一:在 Ubuntu Server 上生成自建 CA
# 1. 创建 CA 私钥
openssl genrsa -out myCA.key 2048
# 2. 创建 CA 证书(自签名,有效期10年)
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 3650 -out myCA.pem \
-subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/OU=YourUnit/CN=MyLAN-CA"
步骤二:为 192.168.1.3 生成证书请求(CSR)
# 1. 生成服务器私钥
openssl genrsa -out cert.key 2048
# 2. 生成证书请求(CSR)
openssl req -new -key cert.key -out cert.csr \
-subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/OU=YourUnit/CN=192.168.1.3"
步骤三:为服务器签发证书(含IP扩展)
- 创建一个
v3.ext
文件,内容如下(确保有 subjectAltName):authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] IP.1 = 192.168.1.3
- 用 CA 签发证书:
openssl x509 -req -in cert.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial \ -out cert.crt -days 825 -sha256 -extfile v3.ext
步骤四:在服务器上配置 HTTPS
将
cert.crt
和cert.key
配置到你的 Web 服务器(如 Nginx、Apache)上。
步骤五:让局域网内的浏览器信任你的 CA
- 将 myCA.pem 拷贝到每台客户端电脑。
- 导入 CA 证书:
- Windows:双击
myCA.pem(改名为:myCA.crt)
,选择“安装证书”,安装到“受信任的根证书颁发机构”。 - 或者以管理员身份打开命令提示符,执行:
certutil -addstore -f "Root" myCA.crt
- Mac:用“钥匙串访问”导入,设置为“始终信任”。
- Linux:拷贝到
/usr/local/share/ca-certificates/
,改名为myCA.crt
,然后执行sudo update-ca-certificates
。
步骤六:访问 https://192.168.1.3
此时浏览器不会再提示“你的连接不是专用连接”,而是显示安全锁标志。
常见问题
- 为什么不能直接用自签名证书?
因为浏览器只信任受信任的CA签发的证书。自签名证书需要每台客户端都信任该证书,且不方便管理。 - 为什么要用 subjectAltName?
现代浏览器要求证书必须有 subjectAltName 字段,且包含访问的 IP 地址或域名。
- 用 CA 签发证书: