SSL Certificates深入理解

世有因果知因求果發表於2017-11-03

http://www.littlewhitedog.com/content-71.html

https://www.verisign.com/en_US/website-presence/website-optimization/ssl-certificates/index.xhtml

 什麼是certificate(證書)?

一個certificate是一種擔保你的網站完整性和權威性的方式。如果你搭建了一個ssl web網站,你總會希望你的使用者能夠信任這個網站。你在你的網站上安裝一個certificate證書。有兩種方式來獲得一個證書:要麼你自己建立,要麼你向一個CA公司購買一個證書certificate(比如:verisign,Equifax,Thawte等等)

在這裡,核心的概念是信任。作為一個使用者,當訪問一個站點時,你是否信任該網站關於安全的宣告?證書的作用就好像是網站對你說:“你可以信任我,請相信我,我是一個誠實的人,沒有任何一句謊言。"

這只是ssl網站的第一步,第二步是:你,或者更確切地說是你的瀏覽器,決定接受該網站關於安全的宣告,並且開始信任這個網站。對於大多數ssl網站來說,這個信任過程是無縫的,使用者無法感知這個過程。這時因為瀏覽器本身信任一些已知的簽發證書...

證書是怎麼工作的?

certificate可以為其他的證書用於"sign"簽名,或者擔保.這就是你的瀏覽器決定他是否信任你網站的證書的基礎。我們來看一個網站https://www.fastmail.fm的證書情況。

從這個對話方塊,你可以看到certificate證書存在的目的:該證書用於驗證網站的身份-以及是誰簽發了該證書,簽發給了誰(哪個網址),以及該證書的過期時間。在本文成文之際,該網站的證書是有效的,但是隨著時間的推移,證書可能會過期哦!!

目前為止,一切順理成章,但是你如何知道該證書確實是值得信賴的,而不是瀏覽器自己胡亂接受了該證書而未做有效的驗證呢?如果你點選details tab,你可以看到該證書更多的資訊:

你可以從上圖中看到更多的資訊:簽發者-這裡是Thawte,有效的時間,以及該證書的受益人-subject.

再點選certification path tab:

這裡你可以看到certification authority hierarchy(證書層級)。換句話說,這個網站的certificate是根證書Thawte server CA的一個證書鏈。這個path只有兩級,有一些證書鏈可能有三級甚至更多的級別。

IE已經信任了Thawte Servr CA,因此IE會信任任何使用該CA簽發(signed)的證書。這裡的邏輯是這樣的:”我不認識你,但是我已經認識他,而他為你做了擔保所以我信任你。"如果你想看看Thawte Server CA長什麼樣,你可以點選它,檢視證書詳細資訊如下:

到這裡,你可能會趕到疑惑,為什麼根證書Thawte Server CA能被IE瀏覽器信任呢? Fastmail的certificate在被信任之前,必須使用一個已知信任的CA證書來簽發(signed)。但是Thawte Server CA又是由誰來簽發呢?答案是:不需要

IE內建了很多被IE信任的證書certificate,這些證書就被成為根證書,而Thawte Server CA就是這些證書之一。這些根證書你可以在你的PC上看到。通過IE的internet options中的security選項,你就可以看到:

從這個列表裡面,你可以看到Thawter Server CA.如果你點選view button,則可以看到前面類似的資訊。

在前面的例子中,證書僅僅用於認證Fastmail web server的身份。而證書的作用遠不止此。他們也可以用於驗證軟體的完整性。當登入進入安全系統時,他們可以用於代替userid和password。或許證書最著名的用處是在e-mail應用中。使用者可以使用證書來加密e-mail來保護隨意的窺探。

使用者也可以用證書來簽發(sign)一封郵件,來說明這封郵件確實是從發件人來發出的,而不是被人冒充發件人的名義偽造的郵件。

證書可能會有哪些錯誤?

有時你的瀏覽器可能會抱怨他遇到了證書問題。有時你可能看到下面的錯誤:

證書有時可能會被簽發機構(signing authority)被標記為revoked(作廢)狀態,而簽發機構會維護一個列表,被稱為-Certificate Revocation List(CRL),專門列出哪些證書被作廢。你的瀏覽器知道如何通過這個CRL來檢查你的網站的證書是否有被作廢.

如果你看到上面這個警告資訊,並不一定意味著你的網站的證書是有問題的,也不一定意味著對你的計算機有任何的危害,這條警告資訊只是意味著你的瀏覽器無法通過CRL來double-check你的網站證書未被作廢而已。但是這並不意味著這個警告訊息不重要;相反地,除非你確信你信任該網站,否則你應該檢視一下該網站的證書的細節。如果證書已經過期,或者用的太快,你可能看到下面的資訊:

在點選yes之前要非常小心。你是否要繼續和一個證書過期的網站做生意?或許不會吧。如果點選檢視證書,你可能看到:

你可以看到該網站的證書早已過期,這也是為什麼瀏覽器不希望這個網站的原因!點選一下certification path tab,你可以看到:

這個證書連結都是過期的!

另一種原因可能是你的瀏覽器不知道誰簽發了這個證書:

缺乏一個trusted certification authority並不一定意味著網站不能信任。僅僅意味著瀏覽器不知道 誰能為該網站做擔保,因此不會自動接收並信任他。這個場景下失敗的原因是證書由該網站所在公司自己簽發的,而未被wellknown的CA所簽名(signed),比如:Verisign,Thawte等。

另一種失敗的原因是使用該證書的伺服器本身和證書中的server name並不一致。比如,我們使用https://fastmail.com來訪問,你就可以看到下面的資訊:  

從這個對話方塊,你可以看到出錯的線索:https://fastmail.com這個被訪問的url,而證書是被issued to帶www的url : www.fastmail.com

證書是如何簽發(issued)和被信任的(trusted)?

我以前提到過證書可以有兩種方式來獲得: 要麼你自己簽發(issue),或者從一個trusted certificate authority(CA)來購買。

如果一個站長他自己issue一個certificate並且部署在web server上,那麼可以預見的是所有訪問網站的使用者都會出現"The security certificate was issued by a company you have not chosen to trust.."的警告資訊。

這種情況下,你也可以通過import(匯入)該證書到你的瀏覽器來實現信任self-issued certificates.對不同的瀏覽器,匯入證書的方法是不同的,對IE來說,像下面這個樣子:

一旦你匯入CA成功,你就可以在trusted root certification authorities中看到它。

現在,由於我已經告訴了IE我會信任這個網站,那麼這時再去訪問對應網頁時,就不會再顯示對應的告警資訊。

被已經信任的Certification Authorities所簽名(signed)的certificates將會被瀏覽器默默地接受而不出現任何告警資訊,但是如何構成一個trusted CA呢?很簡單:告訴你的瀏覽器它可以信任來自such-and-such組織簽名的certificate.而這些root ca就是被built-in帶來的。

這些root trusted ca都是由那些有財務信任關係的公司所簽發的證書。Verisign就是一個trustworthy公司,因此任何被VeriSign所signed簽發的證書都被認為是trustworthy.在CA industry中,還有很多類似的公司,比如Equifax,Thawte等等。這些公司具有相應的職責去維護這個信任鏈;如果這些公司sign並issue了針對untrustworthy的web網站,那麼就會越來越少的人信任他們公司,因此就會越來越少的人去購買他們的證書,而這將會導致他們的損失。

本質上來說,這些公司簽發的證書和我自己簽發的證書沒有區別唯一的區別是:這些公司比我可是更加有名,也更值得信賴。Who would you trust, some random stranger from the Internet - no matter how trustworthy he claims to be - or a company which already has a reputation for trustworthiness? 

結論:為什麼無論如何我們需要合法的證書?

原因很簡單:一切來自於信任,真實性和完整性的需要。如果我運營著一個ssl網站,比如我們運營著一家線上銀行-那麼我必須保證和我的connection連線都必須是安全的,不被篡改的。

CA證書的分類

https://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/

 

需要強調的是,不論是 DV、OV 還是 EV 證書,其加密效果都是一樣的! 它們的區別在於:

  • DV(Domain Validation),面向個體使用者,安全體系相對較弱,驗證方式就是向 whois 資訊中的郵箱傳送郵件,按照郵件內容進行驗證即可通過;
  • OV(Organization Validation),面向企業使用者,證書在 DV 證書驗證的基礎上,還需要公司的授權,CA 通過撥打資訊庫中公司的電話來確認;
  • EV(Extended Validation),開啟 Github 的網頁,你會看到 URL 位址列展示了註冊公司的資訊,這會讓使用者產生更大的信任,這類證書的申請除了以上兩個確認外,還需要公司提供金融機構的開戶許可證,要求十分嚴格。