关于1panel面板中OpenResty配置证书的格式问题探究

说明

  • armbian中使用OpenResty进行反向代理,配置ssl证书,但是由于和官网申请的证书内容格式内容不太一样,所以本文就此问题进行ssl证书格式转化的方进行记录,希望能够帮助到其他人!
  • 例如:在华为云申请的ssl证书中nginx部分的证书分为key和crt格式的私钥,但是OpenResty要求的私钥是PEM格式

ssl证书格式CRT&PEM

  • CRT(Certificate)格式和PEM(Privacy Enhanced Mail)格式本质上是相同的,只是文件扩展名不同。
  • CRT文件通常包含证书,而PEM文件是一种通用的编码格式,可以包含证书、私钥等。

转换方法

linux系统

  1. 可以将其内容复制到一个新的文本文件,并将该文件保存为以.pem为扩展名的文件。这样,你就将CRT格式转换为PEM格式
  2. 在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系统

  1. 安装 OpenSSL for Windows:
    • OpenSSL 的官方网站下载 Windows 版本的 OpenSSL。将 OpenSSL 添加到系统的 PATH 环境变量中.
  2. 打开命令提示符:在 Windows 上按下 Win + R,输入 cmd 并按回车键打开命令提示符窗口
  3. 转换证书格式
    openssl x509 -inform der -in your_certificate.crt -out your_certificate.pem -outform PEM
    

  • 在 Windows 上,certutil 是一个用于处理证书和证书服务的命令行实用程序。
  1. 查看证书信息:
    certutil -dump your_certificate.crt
    
  2. 转换证书格式:
    certutil -encode your_certificate.crt your_certificate.pem
    
  3. 导入证书:
    certutil -addstore My your_certificate.crt
    
  4. 导出证书:
    certutil -exportpfx -p password -f -privatekey your_certificate_thumbprint.pfx
    
  5. 删除证书:
    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 数字证书的不同编码格式。
  1. DER 编码格式:
    • Binary Format: DER 是一种二进制编码格式,以二进制形式表示数据。它通常用于在计算机系统之间以二进制形式传输和存储数据。
    • ASN.1 结构: DER 使用 ASN.1(Abstract Syntax Notation One)[一种用于描述数据结构的标准化表示法]来定义数据结构。
    • 无格式化: DER 编码的证书是无格式化的,没有包含任何可读性更强的字符。
    • 文件扩展名: DER 编码的证书通常使用 .der 或 .cer 作为文件扩展名。
  • 示例:
    MIIB0TCCAXmgAwIBAgIJAOD1COWyEJVOMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV
    BAMMCG15X2NlcnQwHhcNMjAwNTA0MTk1NjI1WhcNMjEwNTA0MTk1NjI1WjAXMRUw
    
  1. 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 可读性。

猜你喜欢

转载自blog.csdn.net/yang2330648064/article/details/134796571