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"
6. 极速创建流程(方法三)
1. 命令行方式
openssl req -new -x509 -nodes -days 365 -keyout key.pem -out cert.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=MyUnit/CN=192.168.96.1" -addext "keyUsage = critical, digitalSignature, keyEncipherment" -addext "extendedKeyUsage = serverAuth" -addext "subjectAltName = IP:192.168.96.1"
2. 扩展文件方式
扩展参数文件 san.cnf
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = MyOrg
OU = MyUnit
CN = 192.168.96.1
[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 192.168.96.1
openssl req -new -x509 -nodes -days 365 -keyout key.pem -out cert.crt -config san.cnf
7. 导入证书
-
按下 windows + R 输入 certlm.msc 打开证书管理器

-
导入证书


-
查看导入
- 证书管理器中已经存在

- 使用证书构建服务并,查看浏览器中是否信任

自此便创建成功,并信任证书了