2013-01-13 83 views
2

我希望能夠確定遠程域的TLS/SSL證書是否來自命令行的'可信任'。確定命令行中的TLS/SSL證書是否「受信任」?

下面是一個例子的OpenSSL我用了幾個星期播放,在這裏我使用OpenSSL取得證書,然後將管它OpenSSL的「驗證」命令。我認爲'verify'命令會驗證證書,但是,現在我怎麼理解'verify'命令只是驗證證書鏈(我認爲)。 (cdn.pubnub.com只是一個域名,我從一個快速的Twitter搜索發現,作爲一個例子來使用)

echo "GET /" | openssl s_client -connect cdn.pubnub.com:443 | openssl x509 -text | openssl verify 

你可以從cdn.pubnub.com域(在寫作的時候)看到,瀏覽器(Chrome至少)不信任證書(因爲證書域不匹配),但openssl'verify'命令不輸出'trusted'或'not trusted'或其他我們可以從中扣除信息的東西。

另一種方式我想這樣做的,是通過使用無頭瀏覽器(如PhantomJS)和解析它們返回的任何錯誤。事實證明,PhantomJS只是錯誤,但沒有提供任何細節,所以不能使用,因爲錯誤可能是由其他原因造成的。

我不認爲這將很難找到證書是否信任或不從命令行,而不必解析和檢查所有的數據,使證書信任我自己,我不認爲將是明智的。

是否有一個庫或其他方式我可以告訴如果從命令行信任遠程域的證書?

回答

4

curl(和libcurl)將OpenSSL用於https URL,並檢查證書的有效性,除非啓用了-k, --insecure選項。

zsh 29354 % curl https://cdn.pubnub.com/ 
curl: (51) SSL peer certificate or SSH remote key was not OK 

正如你看到的,它並不會給爲何證書無效太多的細節,但除此之外,它應該是一個無頭的瀏覽器一樣好,而輕得多。

+0

這看起來應該可以工作,我會做一些測試以查看它的縮放比例。非常感謝您的回覆。 – ethicalhack3r

+0

如果端點不是HTTPS,該怎麼辦? –

2

這取決於你認爲的「可信」。旁邊的芯加密檢查(例如檢查該數字簽名)的客戶機通常將執行以下操作:

  1. 檢查證書鏈到受信任的根

  2. 驗證當前時間是notValidBefore和之間無效後屬性。

  3. 該證書未被吊銷。

  4. keyUsage和其他證書約束匹配。

  5. 我們正在溝通的實體以某種方式在證書主題中找到(對於服務器,這通常意味着主機名被列爲CN或subjectAlternativeName)。

在你的情況下,驗證步驟5(即主機名)的信息丟失,所以無法檢查。你必須自己做這一步。 請注意,不同的客戶執行不同的檢查以查看證書是否可信,因此一個答案可能不適用於所有可能的客戶。如果您想深入檢查您的安裝,請考慮使用來自ssl實驗室的支票https://www.ssllabs.com/ssltest/

相關問題