详解SSL证书生成key和pem文件的全过程
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
在现代互联网通信中,保障数据传输的安全性至关重要,SSL(Secure Sockets Layer)证书作为实现 HTTPS 加密通信的核心技术之一,已被广泛应用于网站、API 接口以及各类网络服务中,通过 SSL 证书,客户端与服务器之间的通信内容得以加密,有效防止窃听、篡改和身份冒充等安全威胁。
在部署 SSL 证书的过程中,生成私钥(.key
文件)和证书文件(.pem
文件)是不可或缺的基础步骤,本文将详细介绍如何使用开源工具 OpenSSL 安全高效地生成这些关键文件,并深入解析其作用、格式及实际应用场景,帮助开发者和运维人员更好地理解并掌握 HTTPS 的底层机制。
.key 与 .pem 文件的含义与区别
我们需要明确 .key
和 .pem
文件分别代表什么。
-
.key
文件:这是服务器的私钥文件,通常采用 PEM 编码格式存储,私钥是整个加密体系中最敏感的部分,用于解密由公钥加密的数据,在 TLS 握手过程中起着决定性作用,私钥必须严格保密,不得泄露或公开。 -
.pem
文件:这是一种基于 Base64 编码的文本格式文件,扩展名为.pem
(Privacy Enhanced Mail),可包含多种类型的加密信息,如服务器证书、中间证书、根证书,甚至私钥本身,在 SSL/TLS 体系中,.pem
文件常用于存储完整的证书链,便于 Web 服务器统一加载和验证。
需要注意的是,虽然 .pem
可以封装私钥,但在生产环境中应避免将私钥与证书合并存储于同一文件,除非有明确的安全控制措施。
使用 OpenSSL 生成 SSL 证书文件的标准流程
OpenSSL 是一个功能强大且广泛应用的开源密码学工具包,支持多种加密算法和协议操作,以下是生成 SSL 所需 .key
和 .pem
文件的标准流程:
生成私钥(.key
文件)
打开终端或命令行工具,执行以下命令生成一个 2048 位的 RSA 私钥:
openssl genrsa -out server.key 2048
该命令会生成一个名为 server.key
的私钥文件,适用于大多数现代安全标准,若需更高安全性,推荐使用 4096 位长度:
openssl genrsa -out server.key 4096
为增强安全性,还可以为私钥添加密码保护(加密存储):
openssl genrsa -des3 -out server.key 2048
⚠️ 注意:添加密码后,每次启动 Web 服务器时都需要手动输入密码,可能影响自动化服务运行,生产环境通常选择不加密私钥,但必须确保其文件权限设置严格(如
chmod 600 server.key
)。
生成证书签名请求(CSR)
使用上一步生成的私钥创建 CSR(Certificate Signing Request),以便提交给证书颁发机构(CA)进行正式签发:
openssl req -new -key server.key -out server.csr
执行过程中系统会提示输入以下信息:
- Country Name (国家)
- State or Province (省份)
- Locality Name (城市)
- Organization Name (组织/公司名称)
- Organizational Unit (部门)
- Common Name (通用名,即域名,如
example.com
) - Email Address
“Common Name” 必须与目标域名完全一致,如果是通配符证书,则填写为 *.example.com
。
此命令生成的 server.csr
文件可以提交给 Let's Encrypt、DigiCert、Sectigo 等受信任的 CA 机构,用于申请正式 SSL 证书。
生成自签名证书(.pem
文件)
对于测试环境、内部系统或开发用途,可以生成自签名证书,无需依赖第三方 CA:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.pem
该命令将基于 CSR 和私钥生成一个有效期为 365 天的 X.509 格式证书,输出为 server.pem
文件,该文件即可作为服务器证书部署到 Nginx、Apache、Tomcat 等 Web 服务中。
✅ 提示:自签名证书不会被浏览器默认信任,访问时会出现安全警告,仅适用于非公网场景。
验证生成的文件完整性
为确保生成的私钥和证书正确无误,可通过以下命令查看内容并校验有效性:
# 查看证书详细信息 openssl x509 -in server.pem -text -noout
上述命令将输出证书的版本、序列号、签名算法、有效期、公钥信息及扩展字段等内容,帮助确认配置准确性。
生产环境中的最佳实践
在真实生产环境中,不应使用自签名证书,而应向权威 CA 申请正式证书,常见做法如下:
- 将
server.csr
提交给 CA(如通过 Let's Encrypt 的 ACME 协议自动签发); - 获取签发后的服务器证书(通常为
.crt
或.pem
格式); - 下载对应的中间证书(Intermediate Certificate),并将其与服务器证书合并成完整的证书链文件(
.pem
):
cat server.crt intermediate.crt root.crt > fullchain.pem
在 Web 服务器配置中同时指定私钥和完整证书链:
ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/server.key;
这样可以确保客户端能够完整验证证书路径,避免出现“证书不可信”的错误。
补充说明:PEM 格式的灵活性与兼容性
.pem
文件因其可读性强、结构清晰、易于拼接而在 Linux 环境中广受欢迎,它本质上是以 ASCII 文本形式封装的 DER 编码数据,开头通常为:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
不同,也可能包含:
-----BEGIN PRIVATE KEY-----
(PKCS#8 私钥)-----BEGIN RSA PRIVATE KEY-----
(传统 RSA 私钥)-----BEGIN CERTIFICATE REQUEST-----
(CSR)
正因为这种标准化格式,.pem
被广泛用于 Apache、Nginx、Node.js、Python Flask/Tornado 等各类服务框架中。
生成 SSL 证书所需的 .key
和 .pem
文件,是构建 HTTPS 安全通信的基石,通过 OpenSSL 工具,我们可以轻松完成私钥生成、CSR 创建和证书签发等核心操作,无论是用于开发调试还是正式上线,掌握这一流程都具有重要意义。
关键要点回顾:
- 私钥(
.key
)必须严格保密,禁止泄露; .pem
文件可用于存储证书、公钥或证书链;- 生产环境应使用 CA 签发的正式证书,而非自签名;
- 合理配置证书链,确保客户端信任链完整;
- 定期更新证书,建议启用自动化续期机制(如 Certbot)。
只有在每一个环节都做到严谨规范,才能真正实现端到端的数据加密与身份可信,为用户提供安全可靠的网络体验。