每个根 CA 证书都是自签名的;受信任的根证书与“自签名证书”错误之间的区别,仅在于验证方的证书库中是否有它。自签名的服务器证书能提供加密以抵御被动窃听,但除非客户端固定或安装了它,否则不提供身份验证,所以浏览器会显示 NET::ERR_CERT_AUTHORITY_INVALID,工具会报告 self-signed certificate。
在开发环境中,本地私有 CA(mkcert、step-ca 或几条 OpenSSL 命令)比逐个使用自签名叶子证书更好:只需安装一个根证书,就能为每个主机签发带 SAN 的正规证书。切勿为了让自签名证书能用而在代码中禁用验证(verify=False、rejectUnauthorized: false、InsecureSkipVerify)。
一条实用的命令:openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes -keyout key.pem -out cert.pem -days 30 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"。