一、适用场景
本教程适用于 测试环境、内部系统 的 HTTPS 部署,通过 OpenSSL 工具生成自签证书(无需第三方 CA 认证),支持 Linux 全发行版(Ubuntu、Debian、CentOS、RHEL 等)。
二、前提准备
确保系统已安装 OpenSSL 工具,若未安装执行以下命令:
# Ubuntu/Debian
sudo apt-get install -y openssl
# CentOS/RHEL
sudo yum install -y openssl
验证安装:执行 openssl version,显示版本信息即为安装成功。
三、三步生成自签证书
1. 生成 RSA 私钥(1024 位)
openssl genrsa -out private.pem 1024
- 说明:
-
- genrsa:生成 RSA 私钥的命令;
-
- out private.pem:指定输出私钥文件名为private.pem;
-
- 1024:密钥长度(可选 2048/4096 位,长度越长安全性越高,推荐生产测试用 2048 位)。
- 生成后建议妥善保管私钥文件,避免泄露。
2. 生成证书签名请求(CSR 文件)
openssl req -new -key private.pem -out csr.pem -subj "/C=CN/ST=GD/L=SZ/O=TEST/OU=SERVER/CN=IOT"
- 核心参数说明:
-
- req -new:创建新的证书签名请求;
-
- key private.pem:指定已生成的私钥文件;
-
- out csr.pem:输出 CSR 文件(证书申请文件,用于后续签名);
-
- subj:直接指定证书主题信息(无需交互输入),各字段含义:
| 字段 | 含义 | 示例值 |
|---|---|---|
| C | 国家 / 地区代码(2 位) | CN(中国) |
| ST | 省份 / 州 | GD(广东) |
| L | 城市 | SZ(深圳) |
| O | 组织 / 企业名称 | TEST |
| OU | 部门名称 | SERVER |
| CN | 通用名称(关键) | IOT(可填域名 / IP / 标识) |
3. 生成自签证书(CER 格式)
openssl x509 -req -days 365 -sha1 -extensions v3_ca -signkey private.pem -in csr.pem -out ca.cer
- 核心参数说明:
-
- x509:生成 X.509 格式证书(HTTPS 标准证书格式);
-
- req:表示输入文件是 CSR 证书请求;
-
- days 365:证书有效期(365 天,可修改为 730 天 = 2 年、3650 天 = 10 年);
-
- sha1:签名算法(可选 sha256,安全性更高,推荐使用-sha256);
-
- extensions v3_ca:启用 v3_ca 扩展,生成 CA 类型证书(支持后续签发其他证书);
-
- signkey private.pem:使用私钥对 CSR 进行自签名;
-
- in csr.pem:输入 CSR 文件;
-
- out ca.cer:输出最终自签证书文件(CER 格式,与 CRT 格式通用)。
四、生成文件说明
执行完上述三步后,当前目录会生成 3 个关键文件:
| 文件名 | 用途 | 重要性 |
|---|---|---|
| private.pem | 私钥文件(服务器端使用) | 极高(禁止泄露) |
| csr.pem | 证书签名请求(中间文件) | 一般(可删除) |
| ca.cer | 自签证书(客户端 / 服务器端) | 高(需部署到服务) |
五、进阶优化建议
1. 生成更高安全性的证书(推荐)
- 密钥长度改为 2048 位,签名算法用 sha256:
# 生成2048位私钥
openssl genrsa -out private.pem 2048
# 生成CSR(参数不变)
openssl req -new -key private.pem -out csr.pem -subj "/C=CN/ST=GD/L=SZ/O=TEST/OU=SERVER/CN=IOT"
# 生成10年有效期、sha256签名的证书
openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey private.pem -in csr.pem -out ca.cer
2. 转换证书格式(按需使用)
- 转换为 PEM 格式(通用格式,大部分服务支持):
openssl x509 -in ca.cer -out ca.pem -outform PEM
- 转换为 PKCS12 格式(适用于 Windows/iOS 等系统):
openssl pkcs12 -export -in ca.cer -inkey private.pem -out ca.pfx -name "IOT HTTPS Cert"
- 转换为 DER 格式(部分 Java 服务支持):
openssl x509 -in ca.cer -out ca.der -outform DER
六、使用场景与注意事项
1. 常见使用场景
- Nginx/Apache 服务器 HTTPS 部署;
- 物联网设备(IOT)通信加密;
- 内部 API 接口 HTTPS 测试;
- 开发环境下的 HTTPS 服务搭建。
2. 关键注意事项
- 自签证书在浏览器中会提示「不安全」(因无第三方 CA 认证),仅用于测试 / 内部系统,生产环境需购买正规 CA 证书(如 Let's Encrypt 免费证书);
- 私钥文件private.pem需设置权限(仅所有者可读):chmod 600 private.pem,避免被其他用户访问;
- CN字段需与服务访问地址一致(如访问https://iot-server,则 CN 填iot-server;访问 IP 则填 IP 地址),否则会出现证书域名不匹配警告;
- 若需多域名 / IP 支持,可在生成 CSR 时添加-san扩展(需手动编辑配置文件,具体可参考扩展教程)。
3. 常见问题排查
- 执行命令提示「openssl: 未找到命令」:检查 OpenSSL 是否安装成功,或添加环境变量;
- 生成证书后服务无法启动:确认私钥与证书匹配,且文件权限正确;
- 浏览器提示证书无效:自签证书正常现象,测试环境可手动信任证书(浏览器设置中导入ca.cer)。