簡體   English   中英

使用Node的HTTPS / TLS與OpenSSL s_client時的不同證書鏈順序

[英]Different certificate chain order when using Node's HTTPS/TLS vs. OpenSSL s_client

我正在嘗試使用Node的HTTPS請求解析證書鏈。 我在npmjs.com上測試它(不是www.npmjs.com)。 當我在OpenSSL上測試它時,它向我顯示鏈的順序不正確。

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', O: 'GeoTrust Inc.', CN: 'RapidSSL SHA256 CA - G3' }
issuer
{ C: 'US', O: 'GeoTrust Inc.', CN: 'GeoTrust Global CA' }

下一個證書 - >

subject
{ C: 'US', O: 'GeoTrust Inc.', CN: 'GeoTrust Global CA' }
issuer
{ C: 'US', O: 'GeoTrust Inc.', CN: 'GeoTrust Global CA' }

為什么會這樣?

看起來節點正在重新排序證書以便在getPeerCertificates中返回,以便它們反映信任鏈(*)中的正確順序。 但實際上證書的順序是錯誤的,正如openssl s_clientSSLLabs分析中所見

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]是自簽名的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM