Ubuntu系统中OpenSSL密钥管理的实用操作指南

一 安装与准备
- 检查系统是否已经安装 OpenSSL:先运行命令查看当前版本号
- 命令:
openssl version
- 命令:
- 如果尚未安装,可先更新软件包索引再完成安装
- 命令:
sudo apt-get update && sudo apt-get install -y openssl
- 命令:
- 建议将私钥统一存放在受控目录中,并设置最小访问权限,例如:
/etc/ssl/private/(由 root 拥有,权限设为 600),这样更符合 Ubuntu 服务器安全管理要求。
二 生成与导出密钥
- 生成带口令保护的 RSA 私钥(更推荐,安全性更高)
- 命令:
openssl genpkey -algorithm RSA -out private.key -aes256
- 命令:
- 生成未加密的私钥(适合自动化部署场景,但安全性主要依赖文件系统权限控制)
- 命令:
openssl genrsa -out private.key 2048
- 命令:
- 从私钥中导出公钥文件
- 命令:
openssl rsa -pubout -in private.key -out public.key
- 命令:
- 生成证书签名请求 CSR(通常用于向 CA 机构申请 SSL 证书)
- 命令:
openssl req -new -key private.key -out server.csr
- 命令:
- 一步生成自签名证书(适用于测试环境或内部服务)
- 命令:
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes
- 命令:
- 生成 ECC 私钥(椭圆曲线算法,密钥更小、性能更好且安全强度高)
- 命令:
openssl ecparam -genkey -name prime256v1 -out ec.key - 导出公钥:
openssl ec -in ec.key -pubout -out ec.pub
- 命令:
- 补充:也可以直接基于现有私钥生成 CSR 文件
- 命令:
openssl req -new -key private.key -out server.csr。
- 命令:
三 查看与校验密钥
- 查看并检查 RSA 私钥是否有效
- 命令:
openssl rsa -in private.key -check -noout - 详细信息:
openssl rsa -in private.key -text -noout
- 命令:
- 查看公钥的详细信息
- 命令:
openssl rsa -pubin -in public.key -text -noout
- 命令:
- 查看证书中包含的公钥内容
- 命令:
openssl x509 -in server.crt -pubkey -noout
- 命令:
- 校验私钥与公钥是否匹配(通过比较模数完成)
- 命令:
openssl rsa -noout -modulus -in private.key | openssl md5 - 命令:
openssl rsa -pubout -noout -modulus -in private.key | openssl md5
- 命令:
- 对于其他算法类型(如 DSA/EC),可以使用对应的 OpenSSL 子命令进行查看和验证:
openssl dsa ...、openssl ec ...。
四 转换与打包
- 私钥格式转换:将传统 PEM 转为 PKCS#8(兼容性更好,也更方便程序导入)
- 命令:
openssl pkey -in private.key -out private_pkcs8.pem -outform PEM
- 命令:
- 证书编码格式转换:PEM 与 DER 之间互转
- PEM→DER:
openssl x509 -in server.crt -out server.der -outform DER - DER→PEM:
openssl x509 -in server.der -inform DER -out server.crt -outform PEM
- PEM→DER:
- 打包为 PKCS#12(.p12/.pfx,常见于浏览器、Windows 客户端或证书导入场景)
- 导出:
openssl pkcs12 -export -in server.crt -inkey private.key -out keystore.p12 -name mycert - 从 .p12 文件分别导出证书和私钥:
- 仅证书:
openssl pkcs12 -in keystore.p12 -out cert_only.pem -clcerts -nokeys - 仅私钥:
openssl pkcs12 -in keystore.p12 -out key_only.pem -nocerts -nodes
- 仅证书:
- 导出:
- 自签名证书与 CSR 相关操作也可以一步完成(适合快速测试)
- 命令:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes。
- 命令:
五、安全与运维的最佳实践
- 权限与存储
- 私钥权限建议设置为 600,属主为 root;同时将私钥保存在受控目录(如 /etc/ssl/private/)中,避免进入代码仓库,或在备份过程中以明文形式被传播。
- 算法与参数
- 优先选择 RSA-3072/4096 或 ECC(prime256v1/secp384r1);摘要算法建议使用 SHA-256 及以上版本;避免继续使用已过时的算法(如 MD5/SHA-1)。
- 口令与轮换
- 为私钥设置高强度口令并妥善备份;同时建立定期轮换密钥和证书的机制,及时撤销旧证书并更新信任链配置。
- 信任与验证
- 在部署 SSL 证书时,应一并分发并正确配置中间证书链;可使用
openssl verify -CAfile ca_bundle.crt server.crt检查证书链是否有效。
- 在部署 SSL 证书时,应一并分发并正确配置中间证书链;可使用
- 审计与备份
- 建议记录密钥的生成、使用、轮换与销毁过程;对备份私钥采取离线保存、加密存储和异地保管等措施,并定期演练恢复流程,以提升运维可靠性。
