Windows 浏览器如何信任自签证书?超详细操作教程

OpenSSL 3.x 极简命令 (含完整身份信息)

下载

Windows 预编译安装包: https://slproweb.com/products/Win32OpenSSL.html

配置

1. 添加环境变量

在系统属性中添加环境 path 环境变量

1767836509601.png

1767836611947.png

2. 重新打开CMD窗口

有输出 openssl 版本号表示安装成功

1767836648731.png

生成证书

将完整的身份信息(国家、省份、组织等)融入到最简命令中。

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 字符串定义了证书拥有者的身份信息:

缩写全称含义你的设置值
CCountry Name国家 (2位代码)CN (中国)
STState/Province省/州Jiangsu (江苏)
LLocality城市/地区Changzhou (常州)
OOrganization组织/公司名Tim
OUOrganizational Unit部门/单位DevTim
CNCommon Name通用名称CA用 TimCA / 网站用 localhost
emailAddressEmail邮箱地址niangumr@gmail.com 如python requests

5. 默认流程

  1. 生成根证书 (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"
  1. 生成并签发网站证书
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"

四下皆无人