在局域网生成SSL证书,使用 HTTPS

在局域网(如 192.168.1.3)上使用 HTTPS 时,浏览器会因为证书不是受信任机构签发而提示“你的连接不是专用连接”。要消除这个警告,常见做法有两种:

  1. 自签名证书 + 客户端信任
  2. 自建局域网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扩展)

  1. 创建一个 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
    
    1. 用 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

      1. 将 myCA.pem 拷贝到每台客户端电脑。
      2. 导入 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 地址或域名。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注