linux 生成https自签证书

239 阅读4分钟

一、适用场景

本教程适用于 测试环境、内部系统 的 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)。