Openssl

SSL證書的pem中CRLF的正確格式是什麼

  • February 23, 2017

目前我正在使用 Ruby on Rails 應用程序中的 SSL 證書。

我將證書與相應的 dhparam 和鏈一起儲存在數據庫中。在某些時候,我想將這些欄位呈現為真實文件並將它們發佈到伺服器。

儘管已發布的證書在客戶端的瀏覽器中工作,但我們遇到了很多其他應用程序(包括 golang 服務、amazon cloudfront ……)告訴我們證書不正確(例如x509: certificate signed by unknown authority)。

因此,我查看了呈現的證書。我能找到的唯一區別是 Ruby 的 OpenSSL 庫返回的證書與我以前使用的輸入符不同:

-----BEGIN CERTIFICATE-----\n MIIDhDCCBWygAwIBAgIQDyh/z7hUIji7pFcz+75NWTANBgkqhkiG9w0BAQsFADCB\n kDER ...

但原始的原始字元串如下所示:

-----BEGIN CERTIFICATE-----\r\n MIIDhDCCBWygAwIBAgIQDyh/z7hUIji7pFcz+75NWTANBgkqhkiG9w0BAQsFADCB\r\n kDER ...

這是我呈現證書的方式:

certificate = OpenSSL::X509::Certificate.new '<raw certificate>' certificate.to_pem # => This returns the \n formatted certificate

CRLF 的不同格式會是問題的根源嗎?兩種格式都有效嗎?

不,x509:certificate by unknown authority 表明證書頒發機構的證書或其頒發的中間證書之一不存在於對方。可能是證書非常新,尚未考慮在內,或者您提到的各方未收到或接受證書。更有可能的是缺少中間證書,因此無法建立到可信證書的鏈。

要查找上面的證書,證書會查找您發送給他們的證書所引用的頒發者證書。然後使用該證書查找下一個證書。最後驗證證書中的簽名並驗證其他資訊(有效期等)。這稱為鏈驗證。這以受信任的證書結束,通常是 CA的自簽名根證書。

顯然,甚至要嘗試查找“父”證書,必須首先解析證書。如果根本無法解析證書,您可能會遇到另一個錯誤。


至於輸入:openssl只返回一個換行符 - 大多數 unix 實用程序可能會這樣做。但是任何不接受 CRLF 甚至不接受 CR(對於 Apple)的實現都會遇到嚴重的麻煩,所以我認為你不會發現很多庫/應用程序不接受任何類型的行尾(當然不是亞馬遜等)。

引用自:https://crypto.stackexchange.com/questions/44123