Windows 浏览器如何信任自签证书?超详细操作教程
OpenSSL 3.x 极简命令 (含完整身份信息)
下载
Windows 预编译安装包: https://slproweb.com/products/Win32OpenSSL.html
配置
1. 添加环境变量
在系统属性中添加环境 path 环境变量


2. 重新打开CMD窗口
有输出 openssl 版本号表示安装成功

生成证书
将完整的身份信息(国家、省份、组织等)融入到最简命令中。
1. 生成根证书 (Root CA)
openssl req -x509 -newkey rsa:2048 -noenc -out ca.crt -keyout ca.key -days 3650 -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=Tim/OU=DevTim/CN=TimCA/emailAddress=niangumr@gmail.com"
2. 签发网站证书 (Web Certificate)
这里我们将网站证书的 CN 改为你的域名(如 localhost 或具体域名),其他信息保持一致(或按需修改)。
openssl req -x509 -newkey rsa:2048 -noenc -out web.crt -keyout web.key -CA ca.crt -CAkey ca.key -days 365 -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=Tim/OU=DevTim/CN=localhost/emailAddress=niangumr@gmail.com" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" -addext "basicConstraints = critical, CA:FALSE"
3. 命令参数详细解释
| 参数 | 含义 | 详细说明 |
|---|---|---|
openssl req | 证书请求工具 | OpenSSL 中用于生成证书请求 (CSR) 和自签名证书的核心命令。 |
-x509 | 自签名模式 | 告诉命令直接输出证书 (.crt),而不是请求文件 (.csr)。配合 -CA 参数使用时,表示直接用指定的 CA 进行签发。 |
-newkey rsa:2048 | 生成新密钥 | 同时生成一个新的 2048 位 RSA 私钥。如果不加这个,OpenSSL 可能会默认使用 ECDSA 或尝试读取已有私钥。 |
-noenc | 不加密私钥 | 生成的私钥文件没有密码保护。这对于 Nginx/Apache 自动重启非常重要,否则每次重启服务都要人工输密码。(旧版本名为 -nodes)。 |
-out filename | 输出证书 | 指定生成的公钥证书保存的文件名(如 web.crt)。 |
-keyout filename | 输出私钥 | 指定生成的私钥保存的文件名(如 web.key)。必须保密! |
-days 365 | 有效期 | 证书的有效天数。根证书通常设长一点(如 3650 天 = 10 年),网站证书设短一点(如 365 天 = 1 年)。 |
-subj "..." | 身份信息 | 直接在命令行指定证书的主题信息(国家、组织等),避免交互式提问。详见下表。 |
-CA ca.crt | 指定 CA 证书 | 使用哪个根证书来签名。 |
-CAkey ca.key | 指定 CA 私钥 | 使用哪个根证书的私钥来盖章(签名)。 |
-addext "..." | 添加扩展 | (关键) 动态添加 X.509 扩展字段。通常用于添加 subjectAltName (SAN),这是 Chrome 信任证书的必要条件。basicConstraints 如果务器证书 ( web.crt ) 被错误地标记为了 CA ( Basic Constraints: CA:TRUE )。这会导致客户端验证时将其视为 CA 证书,进而检查它是否具有 CA 必须的 Key Usage (如 keyCertSign ),由于缺失这些用途会导致如 requents 请求报错。 |
4. Subject (-subj) 字段对照表
Subject 字符串定义了证书拥有者的身份信息:
| 缩写 | 全称 | 含义 | 你的设置值 |
|---|---|---|---|
| C | Country Name | 国家 (2位代码) | CN (中国) |
| ST | State/Province | 省/州 | Jiangsu (江苏) |
| L | Locality | 城市/地区 | Changzhou (常州) |
| O | Organization | 组织/公司名 | Tim |
| OU | Organizational Unit | 部门/单位 | DevTim |
| CN | Common Name | 通用名称 | CA用 TimCA / 网站用 localhost |
| emailAddress | 邮箱地址 | niangumr@gmail.com 如python requests |
5. 默认流程
- 生成根证书 (CA):
openssl req -new -x509 -out ca.crt -noenc -keyout ca.key -days 3650 -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=Tim/OU=DevTim/CN=TimCA/emailAddress=niangumr@gmail.com"
- 生成并签发网站证书:
openssl req -new -x509 -out web.crt -noenc -keyout web.key -CA ca.crt -CAkey ca.key -days 365 -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=Tim/OU=DevTim/CN=localhost/emailAddress=niangumr@gmail.com" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"