↓ 跳过正文
  1. Posts/

签发局域网IP证书

·574 字·2 分钟
目录

最近部署服务,因为客户要求,需要使用https访问,所以就需要签发一个局域网IP的证书。

本篇使用OpenSSL进行签发

IP 证书必须包含 subjectAltName (SAN) 扩展字段,否则 Chrome/Edge 等现代浏览器会提示 NET::ERR_CERT_COMMON_NAME_INVALID。

创建根 CA (Root CA)
#

# 生成 CA 私钥
openssl genrsa -out rootCA.key 4096

# 生成根证书 (有效期 10 年)
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem \
  -subj "/CN=Internal-Local-CA/O=MyLocalOrg/C=CN"

配置文件 ip.ext
#

创建一个名为 ip.ext 的文件,写入目标 IP 信息:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 10.10.20.100
# 如果有多个 IP 或域名可继续追加:
# IP.2 = 10.0.0.1
# DNS.1 = mylocal.lan

生成服务端私钥与 CSR,并用 CA 签发
#

# 1. 生成 IP 的私钥
openssl genrsa -out server.key 2048

# 2. 生成证书签名请求 (CSR)
openssl req -new -key server.key -out server.csr \
  -subj "/CN=10.10.20.100/O=MyLocalOrg/C=CN"

# 3. 签发证书 (有效期 825 天,符合 iOS/macOS 对自签证书的最长限制要求)
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key \
  -CAcreateserial -out server.crt -days 825 -sha256 -extfile ip.ext

信任根证书
#

将生成的 rootCA.pem 分发并导入到终端设备的根证书信任库中:

  • Windows: 双击 rootCA.pem -> 安装证书 -> 本地计算机 -> 放置于“受信任的根证书颁发机构”。

  • macOS: 双击导入 Keychain,找到该证书并设置为“始终信任”。

  • Linux (Ubuntu/Debian): 复制到 /usr/local/share/ca-certificates/rootCA.crt 并运行 sudo update-ca-certificates。

  • iOS / Android: 传输文件至手机安装,并在“设置 -> 关于本机 -> 证书信任设置”中开启完全信任。

PS: 对于Windows7,需要将rootCA.pem的后缀修改为.crt或者cer,这样才能导入。

Nginx配置证书
#

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate     /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}