我有一个 Node.js 服务器,它接收带有XFCC标头中提供的客户端 TLS 证书的请求。
我想在应用程序级别执行相互 TLS,即针对服务器的 CA 信任库验证客户端 TLS 证书 - 所有这些都在应用程序代码中完成,而不是依赖于 Web 代理配置。
我正在使用 NPM 的pem依赖项,它本质上是一堆 JS 包装器openssl
。特别是,类似于 mTLS 所需的验证是verify
方法:
openssl verify -CAfile /my/server/ca-chain.crt client-chain.crt
这适用于最简单的情况:
- ca-chain.crt:
Root CA
->Int 1 CA
- 客户端链.crt
Root CA
->Int 1 CA
->Leaf 1
但在 Int CA 不同的更复杂的情况下它会失败:
- ca-chain.crt:
Root CA
->Int 1 CA
- 客户端链.crt
Root CA
->Int 2 CA
->Leaf 2
具有以下内容:
openssl verify -CAfile /my/server/ca-chain.crt client-chain.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
据我了解,只要所有证书都有效并导致相同 Root CA
,mTLS 就会成功执行,尽管Int CA
's 不同,这意味着verify
不能按原样工作,以便在 App 级别执行 mTLS 等效。
我知道s_client
和s_server
能力,但它们似乎是我需要的黑客,而不是一个适当的解决方案。
我想我的问题是这样的:
- 是否可以
openssl
根据 mTLS 规则使用 CA 链验证证书? - 如果不可能,那么不从头开始编写它的方法是什么?