鉴于某UI软件HTTP登录可以被识别到,购买证书又不便宜。
于是想到了干脆自签,反正也不需要别人访问。
以下教程来自于GPT和我的亲自实践。
创建配置文件:首先创建一个配置文件,用于指定证书的 SAN 信息。例如,创建一个 openssl.cnf 文件,包含以下内容:
- [ req ]
- default_bits = 2048
- prompt = no
- default_md = sha256
- distinguished_name = dn
- req_extensions = req_ext
- [ dn ]
- C = US
- ST = California
- L = San Francisco
- O = My Organization
- OU = My Department
- CN = example.com # 主域名,可以是任何一个目标域名
- [ req_ext ]
- subjectAltName = @alt_names
- [ alt_names ]
- DNS.1 = example.com # 主域名
- DNS.2 = www.example.com # 子域名
- DNS.3 = sub.example.com # 另一个子域名
- DNS.4 = *.example.net # 泛域名
复制代码 请根据需要替换 example.com 等域名信息。DNS.x 中可以添加任意数量的域名或泛域名。
生成私钥和证书:
使用 OpenSSL 生成私钥、CSR 和自签名证书,并引用刚才创建的配置文件:
- # 生成私钥
- openssl genpkey -algorithm RSA -out multi_domain.key -pkeyopt rsa_keygen_bits:2048
- # 生成自签名证书,有效期100年
- openssl req -new -x509 -key multi_domain.key -out multi_domain.crt -days 36500 -config openssl.cnf -extensions req_ext
复制代码 这样生成的 multi_domain.crt 就包含了多个域名和泛域名的信息。
multi_domain.key 是生成的私钥文件。multi_domain.crt 是生成的 100 年有效期自签名证书文件,包含多个域名和泛域名。
验证证书内容:
可以通过以下命令检查证书是否包含多个域名和泛域名:
- openssl x509 -in multi_domain.crt -noout -text | grep -A1 "Subject Alternative Name"
复制代码 此命令会显示 Subject Alternative Name 信息,确保包含配置文件中指定的所有域名和泛域名。
部署证书将生成的 multi_domain.crt 和 multi_domain.key 文件安装到服务器(如 Nginx、Apache)的 HTTPS 配置中,指定证书和密钥路径。
在客户端信任证书由于这是自签名证书,浏览器默认会显示安全警告。要消除警告,需要手动在客户端信任此证书:
- Windows:打开“证书管理器”(certmgr.msc),将 .crt 文件导入到“受信任的根证书颁发机构”下。
- macOS:在“钥匙串访问”中导入 .crt 文件,并设置为“始终信任”。
|