Go-加密学(五) - 证书crt、pem、pfx、cer、key 作用及区别

本文详细介绍了X.509证书的两种常见编码格式PEM和DER,包括它们的文本展示形式、编码区别,以及相关的文件扩展名如.CRT、.CER、.KEY等。还涵盖了如何通过OpenSSL工具检查和转换不同格式的证书和私钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、编码格式

二、相关的文件扩展名


一、编码格式

同样的 X.509 证书,可能有不同的编码格式,目前有以下两种编码格式。

1、PEM - Privacy Enhanced Mail

打开看文本格式,以“-----BEGIN...”开头,“-----END...”结尾,内容是 BASE64 编码。

查看 PEM 格式证书的信息: 

openssl x509 -in certificate.pem -text -noout

PEM格式是证书颁发机构颁发证书的最常见格式.PEM证书通常具有扩展名,例.pem,.crt,.cer和.key。它们是Base64编码的ASCII文件,包含“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”语句。服务器证书,中间证书和私钥都可以放入PEM格式。

Apache和其他类似服务器使用PEM格式证书。几个PEM证书,甚至私钥,可以包含在一个文件中,一个在另一个文件之下,但是大多数平台(例如Apache)希望证书和私钥位于单独的文件中

2、DER - Distinguished Encoding Rules

DER格式只是证书的二进制形式,而不是ASCII PEM格式。它有时会有.der的文件扩展名,但它的文件扩展名通常是.cer所以判断DER .cer文件和PEM .cer文件之间区别的唯一方法是在文本编辑器中打开它并查找BEGIN / END语句。所有类型的证书和私钥都可以用DER格式编码。DER通常与Java平台一起使用,Java 和 Windows 服务器偏向于使用这种编码格式。SSL转换器只能将证书转换为DER格式

查看 DER 格式证书的信息:

openssl x509 -in certificate.der -inform der -text -noout 

二、相关的文件扩展名

这是比较误导人的地方,虽然我们已经知道有 PEM 和 DER 这两种编码格式,但文件扩展名并不一定就叫“PEM”或者“DER”,常见的扩展名除了 PEM 和 DER 还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式。

1、CRT

CRT 应该是 certificate 的三个字母,其实还是证书的意思。常见于 UNIX 系统,有可能是 PEM 编码,也有可能是 DER 编码,大多数应该是 PEM 编码,相信你已经知道怎么辨别。

2、CER

还是 certificate,还是证书。常见于 Windows 系统,同样的可能是 PEM 编码,也可能是 DER 编码,大多数应该是 DER 编码。

3、KEY

通常用来存放一个公钥或者私钥,并非 X.509 证书。编码同样的,可能是 PEM,也可能是 DER。

查看 KEY 的办法:  

openssl rsa -in mykey.key -text -noout 

如果是 DER 格式的话,同理应该这样了: 

openssl rsa -in mykey.key -text -noout -inform der

4、CSR

Certificate,Signing Request,即证书签名请求。这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息)。在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好。做过 iOS APP 的朋友都应该知道是,怎么向苹果申请开发者证书的吧。

查看的办法:

openssl req -noout -text -in my.csr 

(如果是 DER 格式的话照旧加上 -inform der,这里不写了)。

5、PFX/P12

predecessor of PKCS#12,对 unix 服务器来说,一般 CRT 和 KEY 是分开存放在不同文件中的,但 Windows 的 IIS 则将它们存在一个 PFX 文件中,(因此这个文件包含了证书及私钥)这样会不会不安全?应该不会,PFX 通常会有一个“提取密码”,你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX 使用的时 DER 编码,如何把 PFX 转换为 PEM 编码?

openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

这个时候会提示你输入提取代码,for-iis.pem 就是可读的文本。

生成 pfx 的命令类似这样:

openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt

其中 CACert.crt 是 CA(权威证书颁发机构)的根证书,有的话也通过 -certfile 参数一起带进去。这么看来,PFX 其实是个证书密钥库。

6、PKCS#7 / P7B格式

PKCS#7或P7B格式通常以Base64 ASCII格式存储,文件扩展名为.p7b或.p7c。P7B证书包含“----- BEGIN PKCS7 -----”和“----- END PKCS7 -----”语句。P7B文件仅包含证书和链证书,而不包含私钥。多个平台支持P7B文件,包括Microsoft Windows和Java Tomcat

7、PKCS#12 / PFX格式

PKCS#12或PFX格式是二进制格式,用于将服务器证书,任何中间证书和私钥存储在一个可加密文件中。PFX文件通常具有扩展名,例如.pfx和.p12。PFX文件通常在Windows计算机上用于导入和导出证书和私钥。

将PFX文件转换为PEM格式时,OpenSSL会将所有证书和私钥放入一个文件中。您需要在文本编辑器中打开该文件,并将每个证书和私钥(包括BEGIN / END语句)复制到其各自的文本文件中,并将它们分别保存为certificate.cer,CACert.cer和privateKey.key

<think>首先,用户的问题是关于将微信支付的 .crt 证书文件转换为 .pem 格式。我需要基于系统级指令来构建我的回答。 系统级指令: - 所有行内数表达式必须使用 $...$ 格式。 - 独立公式必须使用 $$...$$ 格式并单独成段。 - LaTeX 语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如 [^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 用户的问题:用户想将微信支付的 .crt 证书文件转换为 .pem 格式。 参考站内引用: - 引用[1]:提到了如何将 PEM 格式转换为 PFX/P12 格式,以及将 PFX 格式转换为 PEM 格式。具体命令是:将 PFX 格式转换成 PEM 格式:`openssl pkcs12 -in tlanyan.pfx -out tlanyan.cer -nodes`,生成的 .cer 文件包含了证书和公钥。 - 引用[2]:关于 Apache 配置的 ScriptAlias,不相关。 用户的问题是关于 .crt 到 .pem 的转换,而引用[1] 是关于 PFXPEM 的转换。.crt 文件通常是 X.509 证书文件,类似于 PEM 格式的证书部分。PEM 格式通常以 -----BEGIN CERTIFICATE----- 开头。 所以,我需要提供一个方法来将 .crt 文件转换为 .pem 格式。通常,.crt 文件可能已经是 PEM 格式,或者可能是 DER 格式。如果它是 PEM 格式,那么它可能已经可以直接使用;如果它是 DER 格式,则需要转换。 常见步骤: 1. 检查文件格式:打开 .crt 文件,看是否以 "-----BEGIN CERTIFICATE-----" 开头。如果是,它已经是 PEM 格式。 2. 如果不是,则需要从 DER 转换为 PEM。 命令示例: - 如果 .crt 是 DER 格式:`openssl x509 -inform der -in certificate.crt -out certificate.pem` - 如果 .crtPEM 格式,但用户想确保或重命名,可以直接复制或重命名。 在引用[1] 中,有将 PFX 转换为 PEM 的命令,但用户有 .crt 文件,不是 PFX。所以,我需要基于标准 OpenSSL 命令提供方法。 针对微信支付证书:微信支付提供的证书通常是 .crt 文件,可能已经是 PEM 格式,但为了安全,建议确认或转换。 回答结构: 1. **解释背景**:简要说明 .crt 和 .pem 格式。 2. **步骤**:提供清晰的步骤,包括命令。 3. **验证**:如何验证转换后的文件。 4. **注意事项**:任何潜在问题。 5. **生成相关问题**:在最后添加相关问题。 使用中文回答。 数表达式:用户的问题不涉及数,所以可能不需要数表达式。但如果需要,我可以添加一些解释,比如在讨论加密时,但最好保持简单。 生成相关问题:基于主题,如证书转换、OpenSSL 使用等。 引用:在回答中,如果引用参考,添加标识。引用[1] 部分相关,我可以引用它。 引用[1] 说:"将pfx格式转换成pem格式 openssl pkcs12 -in tlanyan.pfx -out tlanyan.cer -nodes",但用户有 .crt,不是 .pfx。所以,我需要提供不同的命令。 命令:对于 .crt 到 .pem- 假设 .crt 是 DER 格式:`openssl x509 -inform der -in wechat.crt -out wechat.pem` - 如果 .crtPEM 格式,`openssl x509 -in wechat.crt -out wechat.pem -text` 或直接复制。 更简单的方法:如果文件是文本格式(PEM),可以直接重命名为 .pem。如果是二进制(DER),则需要转换。 步骤: 1. 检查文件类型:在命令行中,`file wechat.crt` 或在文本编辑器中打开。 2. 如果显示 "PEM certificate",则它是 PEM 格式。 3. 如果显示 "DER certificate",则需要转换。 转换命令: ``` openssl x509 -inform der -in certificate.crt -out certificate.pem ``` 如果已经是 PEM,但想提取证书部分,可以使用: ``` openssl x509 -in certificate.crt -out certificate.pem ``` 在回答中,提供示例。 最终回答大纲: 1. 介绍:.crt 文件可能已经是 PEM 格式,但有时需要转换。 2. 步骤: - 步骤 1: 检查文件格式。 - 步骤 2: 如果 DER,使用 OpenSSL 转换。 - 步骤 3: 验证输出。 3. 示例命令。 4. 注意事项:确保 OpenSSL 已安装等。 5. 相关问题。 引用参考:引用[1] 提到了转换,但不直接匹配,所以我可以参考它一般性。 在末尾添加引用标识。</think>### 如何将微信支付的 .crt 证书文件转换为 .pem 格式 微信支付的证书文件(通常以 .crt 为扩展名)可能采用 DER(二进制)或 PEM(Base64 编码文本)格式。PEM 格式是 OpenSSL 和相关工具的常用格式,它以 `-----BEGIN CERTIFICATE-----` 开头。以下步骤将指导您完成转换过程。转换需要使用 OpenSSL 工具(一个开源的加密工具包),请确保已安装 OpenSSL(Windows 用户可从 [OpenSSL 官网](https://www.openssl.org/) 下载,macOS/Linux 用户通常预装)。 #### 步骤 1: 检查 .crt 文件的格式 在转换前,先确认文件格式: - 用文本编辑器(如记事本、VS Code)打开 .crt 文件。 - 如果文件以 `-----BEGIN CERTIFICATE-----` 开头,则它已经是 PEM 格式,无需转换(可直接重命名为 .pem 文件)。 - 如果文件是乱码或二进制数据,则它是 DER 格式,需要转换。 #### 步骤 2: 使用 OpenSSL 转换 DER 格式到 PEM 格式 如果 .crt 文件是 DER 格式,运行以下命令进行转换。**请将命令中的文件名替换为您的实际文件路径。** ```bash openssl x509 -inform der -in 微信证书.crt -out 微信证书.pem ``` - **命令解释**: - `openssl x509`: 处理 X.509 证书- `-inform der`: 指定输入格式为 DER。 - `-in 微信证书.crt`: 输入文件名(假设您的文件名为 `微信证书.crt`)。 - `-out 微信证书.pem`: 输出文件名(生成 .pem 文件)。 如果 .crt 文件已经是 PEM 格式,但您想提取证书内容或重命名,可直接运行: ```bash openssl x509 -in 微信证书.crt -out 微信证书.pem ``` #### 步骤 3: 验证转换结果 - 打开生成的 .pem 文件,检查是否以 `-----BEGIN CERTIFICATE-----` 开头。 - 使用 OpenSSL 验证文件内容: ```bash openssl x509 -in 微信证书.pem -text -noout ``` 这将显示证书详情(如颁发者、有效期),如果无错误输出,表示转换成功。 #### 注意事项 1. **OpenSSL 安装**: 如果未安装 OpenSSL,Windows 用户需设置环境变量(将 OpenSSL bin 目录添加到 PATH)。macOS/Linux 用户可通过终端直接运行。 2. **文件路径**: 确保命令在文件所在目录运行,或使用绝对路径(如 `-in C:\path\to\微信证书.crt`)。 3. **微信支付证书**: 微信支付提供的 .crt 文件通常是 DER 格式,转换后 .pem 文件可用于 API 集成(如退款、支付通知验证)。 4. **安全提示**: 证书文件包含敏感信息,转换后妥善保管私钥文件(微信支付通常会提供单独的 .key 文件,私钥不需要转换)。 5. **错误处理**: 如果遇到 "unable to load certificate" 错误,检查输入文件格式是否正确。参考 OpenSSL 文档或社区资源[^1]。 此方法基于 OpenSSL 的标准转换流程,适用于微信支付证书。如果您有其他格式转换需求(如 PFXPEM),可参考类似工具[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值