文章目录
- 说明
- ssl证书格式CRT&PEM
- 转换方法
- linux系统
- win系统
- 问题: ASN.1 编码错误
- 补充:DER和pem编码格式
说明
- armbian中使用OpenResty进行反向代理,配置ssl证书,但是由于和官网申请的证书内容格式内容不太一样,所以本文就此问题进行ssl证书格式转化的方进行记录,希望能够帮助到其他人!
- 例如:在华为云申请的ssl证书中nginx部分的证书分为key和crt格式的私钥,但是OpenResty要求的私钥是PEM格式
ssl证书格式CRT&PEM
- CRT(Certificate)格式和PEM(Privacy Enhanced Mail)格式本质上是相同的,只是文件扩展名不同。
- CRT文件通常包含证书,而PEM文件是一种通用的编码格式,可以包含证书、私钥等。
转换方法
linux系统
- 可以将其内容复制到一个新的文本文件,并将该文件保存为以.pem为扩展名的文件。这样,你就将CRT格式转换为PEM格式
- 在Linux或类Unix系统上,还可以使用以下命令将CRT转换为PEM:
openssl x509 -in your_certificate.crt -out your_certificate.pem -outform PEM
- 执行命令会修改私钥的内容?
- 执行上述命令不会修改原始的证书文件(your_certificate.crt)。该命令的目的是将输入的CRT格式的证书文件(your_certificate.crt)转换为PEM格式,并将转换后的内容输出到一个新的PEM文件(your_certificate.pem)中。
- 原始的CRT文件(your_certificate.crt)将保持不变,而PEM文件(your_certificate.pem)将包含与CRT文件相同的证书信息,只是以PEM格式进行编码。
win系统
- 安装 OpenSSL for Windows:
- 从 OpenSSL 的官方网站下载 Windows 版本的 OpenSSL。将 OpenSSL 添加到系统的 PATH 环境变量中.
- 打开命令提示符:在 Windows 上按下 Win + R,输入 cmd 并按回车键打开命令提示符窗口
- 转换证书格式
openssl x509 -inform der -in your_certificate.crt -out your_certificate.pem -outform PEM
- 在 Windows 上,certutil 是一个用于处理证书和证书服务的命令行实用程序。
- 查看证书信息:
certutil -dump your_certificate.crt
- 转换证书格式:
certutil -encode your_certificate.crt your_certificate.pem
- 导入证书:
certutil -addstore My your_certificate.crt
- 导出证书:
certutil -exportpfx -p password -f -privatekey your_certificate_thumbprint.pfx
- 删除证书:
certutil -delstore My your_certificate_thumbprint
问题: ASN.1 编码错误
root@armbian:/home# openssl x509 -inform der -in server.crt -out server.pem -outform PEM
unable to load certificate
548506843632:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:../crypto/asn1/tasn_dec.c:1149:
548506843632:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:309:Type=X509
- 是由于证书文件不符合预期的 DER 编码格式导致的
- 证书文件是 DER 编码格式:
openssl x509 -inform der
命令用于解析 DER 编码的证书。确保server.crt
文件确实是 DER 编码格式的证书。如果证书是PEM
编码的,应该使用-inform PEM
而不是-inform der
。
openssl x509 -inform PEM -in server.crt -out server.pem -outform PEM
补充:DER和pem编码格式
- DER(Distinguished Encoding Rules)和 PEM(Privacy-Enhanced Mail)都是用于表示 X.509 数字证书的不同编码格式。
- DER 编码格式:
- Binary Format: DER 是一种二进制编码格式,以二进制形式表示数据。它通常用于在计算机系统之间以二进制形式传输和存储数据。
- ASN.1 结构: DER 使用 ASN.1(Abstract Syntax Notation One)[一种用于描述数据结构的标准化表示法]来定义数据结构。
- 无格式化: DER 编码的证书是无格式化的,没有包含任何可读性更强的字符。
- 文件扩展名: DER 编码的证书通常使用 .der 或 .cer 作为文件扩展名。
- 示例:
MIIB0TCCAXmgAwIBAgIJAOD1COWyEJVOMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV BAMMCG15X2NlcnQwHhcNMjAwNTA0MTk1NjI1WhcNMjEwNTA0MTk1NjI1WjAXMRUw
- PEM 编码格式:
- Base64 格式: PEM 使用 Base64 编码将二进制数据转换为可打印的 ASCII 字符串。这使得 PEM 格式在文本环境中更易于处理和传输。
- 包含边界标识: PEM 编码的证书包含了边界标识,如 “-----BEGIN CERTIFICATE-----” 和 “-----END CERTIFICATE-----”,用于标识 PEM 数据的起始和结束。
- 可读性更强: 由于使用了 Base64 编码,PEM 编码的证书相对于 DER 编码来说更具可读性。
- 文件扩展名: PEM 编码的证书通常使用 .pem、.crt、.cer 或 .key 作为文件扩展名。
-
示例:
-----BEGIN CERTIFICATE----- MIIB0TCCAXmgAwIBAgIJAOD1COWyEJVOMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV BAMMCG15X2NlcnQwHhcNMjAwNTA0MTk1NjI1WhcNMjEwNTA0MTk1NjI1WjAXMRUw ... -----END CERTIFICATE-----
-
总体而言,DER 和 PEM 都用于表示相同的 X.509 数字证书,只是它们在数据的表示和传输上有所不同。PEM 格式在实际应用中更为常见,因为它兼具二进制数据的安全性和 ASCII 可读性。