node.js - NodeJS 14:使用 SSL CA 包
我目前正在尝试在 NodeJS 14.0 中使用 CA 捆绑包。我一直在使用 Namecheap 的文章作为实现此功能的指南。我目前在一些问题上卡住了:
- 对于 https.createServer() 的
ca参数,可以传入哪些文件格式? - 我如何检查 CA 捆绑包是否真的在被使用?
答案#1
对于 https.createServer() 的 ca 参数,可以传入哪些文件格式?
来自 NodeJS tls.createSecureContext:
任何字符串或缓冲区都可以包含多个PEM CA连接在一起
不过,总的来说,NodeJS 使用 PEM 格式。
我如何检查 CA 捆绑包是否真的被使用?
你可以使用未由你的CA签发的证书,例如,自签名证书。
答案#2
一点,可能比你想的更微妙:nodejs 的 tls.createSecureContext 在内部调用 OpenSSL 的 PEM_read_bio_X509_AUX,它实际上接受 三种 PEM 格式(或这些三种格式的任意组合,因为 nodejs 会循环处理)。其中两种格式的 base64/64cpl 数据块包含(完全)一个 X.509 证书,如 rfc7468 第 5 节重新规定的,标签可以是首选的 “CERTIFICATE” 或已弃用的 “X509 CERTIFICATE”。此外,OpenSSL 还接受一种自身格式,标签为 “TRUSTED CERTIFICATE”,数据块包含一个 X.509 证书 加上 OpenSSL 定义的额外(ASN.1)数据;参见例如在线的 d2i_X509_AUX 手册页。OpenSSL 对这些额外数据的使用非常有限,当然其他程序完全不会使用它,因此这种格式很少见。
为了避免混淆,值得注意的是,所有 OpenSSL PEM_read_ 函数,包括这个函数,在搜索 PEM 数据时都会跳过任何“注释”数据,因此实际上包含垃圾数据、然后是一个 PEM 证书、再然后是更多垃圾、再然后是另一个 PEM 证书等的文件/缓冲区,其工作方式与只包含 PEM 证书的文件/缓冲区相同。