大佬教程收集整理的这篇文章主要介绍了node.js – 使用Node的HTTPS / TLS与OpenSSL s_client时的不同证书链顺序,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
openssl s_client -connect npmjs.com:443 -showcerts
OpenSSL响应第一证书
subject: /OU=GT40876434/OU=See www.rapidssl.com/resources/cps (C)14/OU=Domain Control Validated - RapidSSL(R)/CN=*.npmjs.com issuer: /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
下一个证书 – >
subject: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA issuer: /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
下一个证书 – >
subject: /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3 issuer: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
但是,当我使用我的Node的httpS请求逐步浏览证书链时,在发出套接字时我会这样做
socket.getPeerCertificate(true)
链的顺序是正确的,我在Node请求上得到的证书与openssl请求上的证书不同.
节点的响应第一证书:
subject { OU: [ 'GT40876434','See www.rapidssl.com/resources/cps (C)14','Domain Control Validated - RapidSSL(R)' ],CN: '*.npmjs.com' } issuer { C: 'US',O: 'GeoTrust Inc.',CN: 'RapidSSL SHA256 CA - G3' }
下一个证书 – >
subject { C: 'US',CN: 'RapidSSL SHA256 CA - G3' } issuer { C: 'US',CN: 'GeoTrust Global CA' }
下一个证书 – >
subject { C: 'US',CN: 'GeoTrust Global CA' } issuer { C: 'US',CN: 'GeoTrust Global CA' }
为什么会这样?
Chain issues Incorrect order
(*)node-4.5.0(LTS)中的相关代码位于src / node_crypto.cc函数void SSLWrap< Base> :: GetPeerCertificate.在那里,它使用SSL_get_peer_certificate(叶证书)和SSL_get_peer_cert_chain(链)从openssl库中检索叶证书和原始对等证书.然后它不返回原始链顺序中的证书,而是扫描链并通过检查X509_check_issued按照它们彼此依赖的顺序添加证书.
这样,它以适当的依赖顺序返回证书,而不是由对等方发送的原始顺序.它还会自动跳过任何不属于链的证书.
它也会添加证书的颁发者,即使它不包含在链中(通常不包含).这样,您不仅可以获得不同的证书顺序,如示例中所示,而且实际上是不同的证书.服务器按此顺序发送以下证书:
[A] /OU=GT40876434/OU=See www.rapidssl.com/resources/cps (C)14/OU=Domain Control Validated - RapidSSL(R)/CN=*.npmjs.com [B] /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA,issued by Equifax [C] /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
但getPeerCertificate返回以下内容:
[A] /OU=GT40876434/OU=See www.rapidssl.com/resources/cps (C)14/OU=Domain Control Validated - RapidSSL(R)/CN=*.npmjs.com [C] /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3 [R] CA/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA,self-signed
因此,证书[B]将不包括在内,而是作为信任存储中包含的根证书的证书[R].两者都有相同的主题和密钥,但由不同的实体签名. [B]由Equifax签署,而[R]是自签名的.
以上是大佬教程为你收集整理的node.js – 使用Node的HTTPS / TLS与OpenSSL s_client时的不同证书链顺序全部内容,希望文章能够帮你解决node.js – 使用Node的HTTPS / TLS与OpenSSL s_client时的不同证书链顺序所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。