我们正在尝试创建一个node.js应用程序,该应用程序应该通过HTTPS与服务器进行交互(> TLS v1.2)。我们给出了一些密钥,证书文件列表,以建立与服务器的连接。节点HTTPS需要CA,证书,密钥文件,即CA文件,客户端证书和密钥文件。提供这些时,我们收到以下错误:
Error: unhandled critical extension.
在互联网上花了一些时间之后,我们发现在TLS握手时收到的服务器证书有一些自定义扩展。稍后当我们openssl verify -CAfile ca_file.pem client_cert.pem
时,我们可以重现它:
error 34 at 0 depth lookup:unhandled critical extension
OK
所以,这似乎与OpenSSL有关。我们如何让OpenSSL了解我们的自定义扩展?这些自定义扩展程序也很重要,因此我们不能通过设置-ignore_critical
来忽略错误。
修改
CA证书的X509v3 extensions
部分中包含以下内容,
X509v3 extensions:
X509v3 Subject Key Identifier:
A1:*:*:*...
X509v3 Authority Key Identifier:
keyid:1D:*:*:*
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
服务器证书的X509v3 extensions
部分
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Key Identifier:
E1:*:*...
X509v3 Authority Key Identifier:
keyid:F9:*:*:*...
X509v3 Extended Key Usage:
TLS Web Client Authentication
1.3.*.*.*...: critical
02.
TYPE:TEST..FCC_ID:12345..DP_ID:54321
1.3.*.*.*...: critical
..NULL:TRUE
CA证书没有X509v3 Extended Key Usage
部分。