直接用openssl生成自签名证书是开发测试中最轻量的加密通信方案,只需三步:生成私钥、创建csr、签发证书,并通过配置san支持多域名/ip,最后手动让客户端信任证书。

直接用 OpenSSL 生成自签名证书来保护内部服务,是开发和测试中最常用、最轻量的加密通信方案。它不依赖外部 CA,几分钟就能跑通 HTTPS 或 TLS 加密连接,关键是把私钥保管好、证书配对正确、客户端信任到位。
准备基础环境
确保系统已安装 OpenSSL:
- Linux(Debian/Ubuntu):sudo apt update && sudo apt install openssl -y
- macOS(Homebrew):brew install openssl
- Windows:下载官方编译版(如 OpenSSL-Win64),并把
bin目录加入系统 PATH
验证安装:openssl version -a,看到版本号即表示就绪。
生成私钥与证书(标准三步法)
这是最简可行路径,适合快速验证:
-
生成 2048 位 RSA 私钥(不加密,便于调试):
openssl genrsa -out server.key 2048 -
创建证书签名请求(CSR),带
-subj自动填入信息(例如服务访问地址为192.168.1.50或localhost):
openssl req -new -key server.key -out server.csr -subj "/CN=localhost" -
签发自签名证书,有效期设为 10 年(3650 天)更省心:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
完成后得到两个关键文件:server.key(私钥,严禁外泄)和 server.crt(证书,可分发给客户端)。
增强兼容性:支持多域名/IP(推荐内网用)
浏览器或某些客户端(如 Java、iOS)会校验证书中的访问地址是否匹配。若用 IP 或多个地址访问,必须在证书里声明 Subject Alternative Name(SAN)。
做法是先准备一个 openssl.cnf 配置文件:
- 新建文本,写入
[alt_names]段,例如:DNS.1 = internal.api<br>IP.1 = 192.168.1.50<br>IP.2 = 127.0.0.1
- 生成 CSR 时指定该配置:
openssl req -new -key server.key -out server.csr -config openssl.cnf - 签发证书时带上扩展参数:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extensions v5_req -extfile openssl.cnf
客户端信任这一步不能跳
自签名证书不会被系统自动信任,所以客户端需手动导入 server.crt:
-
浏览器:访问
https://192.168.1.50→ 点“高级”→“继续前往…” → 导入证书到“受信任的根证书颁发机构” -
cURL / Python requests:加参数
--cacert server.crt或设置verify=server.crt -
Java 应用:用
keytool -importcert导入到 JRE 的cacerts或自定义 truststore -
移动端或嵌入式设备:将
server.crt作为资源打包,初始化 TLS 客户端时显式加载
只要服务端正确加载 server.key 和 server.crt,客户端信任了该证书,整个链路就完成了端到端加密通信。











