searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

记一次Haproxy证书加载异常分析

2023-11-30 01:25:42
65
0
  1. 证书加载报错

Haproxy配置检查时报证书加载错误

haproxy -c -f /etc/haproxy.cfg

'bind *:443' : unable to load certificate chain from file '/etc/haproxy/78a6822f-cf06-446e-98bd-036b81ad9635.pem'

  1. 跟踪调试

openssl 一般使用 ERR_put_error 方法暂存错误码,为了定位错误发生点,使用gdb进行追踪:

最终报错信息为,在将读到的字节按照asn1格式解码的时候,libcrypto库认为私钥文件应该具备的一个tag属性不符

  1. 私钥解析

使用ASN.1 JavaScript decoder对私钥进行解析

私钥是PKCS#8结构的,而其私钥文件中-----BEGIN RSA PRIVATE KEY-----的字符又导致 openssl 将其作为PKCS#1结构进行解析,导致openssl认为证书格式不对从而报错

4. ASN.1格式分析

ASN.1 是一种通用的用于加解密的数据编码格式。
其中PKCS#8可以包含其他 ASN.1 结构,通过设置ALGORITHM-IDENTIFIER参数为PKCS#1,可以表示rsaEncryption结构
参见 rfc5208 - Appendix A.  ASN.1 Syntax;
PKCS#1仅用于表示 RSA 算法用到的公私钥结构。
其中RSA私钥文件表示为:

         RSAPrivateKey ::= SEQUENCE {
          version           Version,
          modulus           INTEGER,  -- n
          publicExponent    INTEGER,  -- e
          privateExponent   INTEGER,  -- d
          prime1            INTEGER,  -- p
          prime2            INTEGER,  -- q
          exponent1         INTEGER,  -- d mod (p-1)
          exponent2         INTEGER,  -- d mod (q-1)
          coefficient       INTEGER,  -- (inverse of q) mod p
          otherPrimeInfos   OtherPrimeInfos OPTIONAL
        } 

以上结构参见 rfc3447 - A.1.2 RSA private key syntax
私钥的结构不符合 rfc3447 - A.1.2 RSA private key syntax。

  1. 解决办法

转换私钥格式,从PKCS#8转化为PKCS#1格式, 重新加载成功

openssl rsa -in test.pkcs8.key -out test.pkcs1.key

0条评论
作者已关闭评论
村委会主任
2文章数
0粉丝数
村委会主任
2 文章 | 0 粉丝
村委会主任
2文章数
0粉丝数
村委会主任
2 文章 | 0 粉丝
原创

记一次Haproxy证书加载异常分析

2023-11-30 01:25:42
65
0
  1. 证书加载报错

Haproxy配置检查时报证书加载错误

haproxy -c -f /etc/haproxy.cfg

'bind *:443' : unable to load certificate chain from file '/etc/haproxy/78a6822f-cf06-446e-98bd-036b81ad9635.pem'

  1. 跟踪调试

openssl 一般使用 ERR_put_error 方法暂存错误码,为了定位错误发生点,使用gdb进行追踪:

最终报错信息为,在将读到的字节按照asn1格式解码的时候,libcrypto库认为私钥文件应该具备的一个tag属性不符

  1. 私钥解析

使用ASN.1 JavaScript decoder对私钥进行解析

私钥是PKCS#8结构的,而其私钥文件中-----BEGIN RSA PRIVATE KEY-----的字符又导致 openssl 将其作为PKCS#1结构进行解析,导致openssl认为证书格式不对从而报错

4. ASN.1格式分析

ASN.1 是一种通用的用于加解密的数据编码格式。
其中PKCS#8可以包含其他 ASN.1 结构,通过设置ALGORITHM-IDENTIFIER参数为PKCS#1,可以表示rsaEncryption结构
参见 rfc5208 - Appendix A.  ASN.1 Syntax;
PKCS#1仅用于表示 RSA 算法用到的公私钥结构。
其中RSA私钥文件表示为:

         RSAPrivateKey ::= SEQUENCE {
          version           Version,
          modulus           INTEGER,  -- n
          publicExponent    INTEGER,  -- e
          privateExponent   INTEGER,  -- d
          prime1            INTEGER,  -- p
          prime2            INTEGER,  -- q
          exponent1         INTEGER,  -- d mod (p-1)
          exponent2         INTEGER,  -- d mod (q-1)
          coefficient       INTEGER,  -- (inverse of q) mod p
          otherPrimeInfos   OtherPrimeInfos OPTIONAL
        } 

以上结构参见 rfc3447 - A.1.2 RSA private key syntax
私钥的结构不符合 rfc3447 - A.1.2 RSA private key syntax。

  1. 解决办法

转换私钥格式,从PKCS#8转化为PKCS#1格式, 重新加载成功

openssl rsa -in test.pkcs8.key -out test.pkcs1.key

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0