2019年4月19日 星期五

為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起。

[不是工程師] 為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起。

信任遊戲中的正義中間人,就讓CA搞定你的身分認證

作者: Vincent Ke 更新日期: 

轉載至 https://progressbar.tw/posts/98

「不是工程師」系列是以生活化 / 口語化的方式,
提供科技用詞或是功能另外一種理解的方式,
所以很多用詞與邏輯可能不是那麼的嚴謹,還請見諒。

HTTPS是一系列的文章,但是因為發表後才發現有些以為大家都知道的事情其實沒那麼普及(工程師同溫層)。所以發表的順序上面沒有很順暢,比較順暢的順序會是下面所列:

HTTPS 三部曲

1. [不是工程師] 差一個字差很多,HTTP 不等於 HTTPS
2. [不是工程師] 你的網站被顯示為不安全嗎?安裝SSL憑證前你可能會想知道的事!
3. [不是工程師] 為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起。

不曉得大家是否嘗試過升級成HTTPS? 然後看到從一年2塊美金一直到一年1~200美金都有,覺得不知所措?

在前面的文章中,我們透過了諜報戰的方式,為各位讀者介紹了SSL和TLS ,而TLS和SSL儘管技術有著差異,但因為TLS其實就是SSL的後續公開版本,其實概念上相當類似,都是透過交握溝通(Handshake )以及公私鑰加密的動作,來達到資料保密的溝通。

在我們建議你如何選購HTTPS之前,先複習一下公私鑰的兩大重點。
(HTTPS的選購建議放在文章的最後面喔!)

  1. 公鑰顧名思義是公開在網路上的,私鑰則是自己的
  2. 彼此在加解密上互應,例如最常見的就是用公鑰加密,私鑰解密

但這中間我們常提到的一個議題,就是如何確保甲乙雙方溝通時,你是真的在和本人做聯繫,還是其實再溝通的過程中早就已經被中間人滲透,或是你傳達訊息的對象,其實又是另外一個人的偽裝呢?


就像我們常常用聊天軟體跟別人聊天,但這過程中,除非你開視訊,不然真得很難即時確認現在跟你聊天的這個角色,到底是不是你心中認定的那個人。

所以通常在網路世界裏,這樣的傳話遊戲,為了確保對方的身分,通常都會讓一個中間機構扮演認證的角色,這個角色就是所謂的數位憑證認證機構(Certificate Authority,CA),也可以被稱為「電子商務認證中心」、「電子商務認證授權機構」,從名稱就可以知道這機構對電子商務的重要性,過去曾也有資安大廠如賽門鐵克(Symantec) 擔任CA的角色(但現在該公司的相關部門已經出售給DigiCert。不過之前有出現過問題,所以購買前請先考慮 新聞連結)。而CA最主要的工作,就是是負責發放和管理數位憑證的權威機構,並作為電子商務交易中受信任的第三方,來擔任公鑰體系中,檢核公鑰合法性的責任。

那究竟CA是怎麼去做身分驗證的呢?



CA中心會為每個使用公開金鑰的用戶,來發放一個「數位憑證」,目的是證明這個憑證中列出的用戶,可以合法擁有憑證中列出的公開金鑰,透過憑證來告訴他人我合法擁有了我的公鑰。而這個憑證除了透過公開外,也包含了CA機構的數位簽章,一來是公開這份憑證的效力,並使得攻擊者不能偽造和篡改憑證。數位憑證通常包含有持有者的公開金鑰、持有者的電子郵件地址、憑證發行單位、憑證有效期限…等等。

若是用生活來舉例,憑證有點像是公文的概念,而公鑰就像是地址,我們可以透過公文來告訴大家,這個地址是屬於我的,而這個數位簽章就像是公文帳面印下的台北市政府,讓大家不僅知道這個效力是師出有名,也不輕易讓別人來做偽造。

所以回到CA本身,他的主要工作就是負責產生、分配以及管理所有參與網上交易與加密的個體,所需的數位憑證,而CA、憑證,以及公私鑰加解的這些機制,其實就是所為的 公開金鑰基礎建設(英語:Public Key Infrastructure,PKI),不管是之前提到的公鑰加密法或是數位簽章,這些機制全部都是建立在所謂的PKI系統上,但不論是SSL或是TLS,憑證跟CA的角色才是裏最關鍵的重心。


但這中間CA公司何其多,彼此之間又有著橫向/縱向的機構從屬關係,這中間是怎麼回事呢

這時候就要先拉回PKI講了,PKI會有一種層層信任的關聯性,具體作法是透過一個中介憑證單位,利用其數位簽章為多個客戶,簽發多個不同的終端實體憑證,但這中間無法透過互相驗證的方式來做檢核,而是以一種樹狀結構來做層層的把關傳遞與把關,而在此傳遞關係中所有下層憑證,都會因為上層的憑證可被信賴而繼承信任基礎。例如A機構(可能是政府等級)發佈了憑證給B,B再發佈給C...等等的,這樣的憑證就會有所謂A>>B>>C的信任鍊產生,B的憑證為A簽發,C的為B簽發..等等。而其中最上層的A,也就是信任鍊的頂端,通常不需要再向其他CA機構做審核,就可稱之為root certificate(根憑證),而頒給根憑證的CA當然就是根CA,所以說Root CA是信任鍊的起點也不為過。


資料來源: 


由於根憑證已經是信任鍊的頂端了,所以本身可以透過自己做出數位簽章(Self-Signed CA)。像是作業系統及瀏覽器等等,也都可以預先安裝已經可被信任的根憑證,表示這些使用者已經授權了應用軟體來去審合這些發佈的 Root CA是否有效,例如政府機關、專職機構(Google、Comodo、DigiCert、GlobalSign、Verisign等等)。而當你使用瀏覽器造訪網站時,就會透過該主機的電子憑證去和根憑證去做驗證,來看上述提到的信任鍊是否有效,來確保SSL/TLS是否足夠安全,所以說頒布Root CA的就CA界的大老也不為過。當然若雙方沒有信任關係存在,也就是這個信任鍊,就會有所謂的警告畫面。


而像這樣的層層信賴鍊機制,我們可以參考台灣的一個實例,像台灣的GRCA(國家發展委員會委託中華電信管理的政府憑證管理中心 ),就將簽發的CA給政府公開金鑰基礎建設(GPKI)的下層CA,而內政部憑證管理中心為GPKI中的第一層下屬CA,並透過GPKI的政策及機制做出最有名的產品,就是所謂的自然人公鑰憑證了。

最後不免俗的,CA最大用處就是為了符合HTTPS的認證,那大家心中就有個疑問,那我的網站要買CA嗎?還是用免費的就好?

先追本溯源,過去在2005年前,其實憑證也只有一種等級的憑證,也就是Class 1的憑證,通常這種憑證只要透過E-mail就可以取得,也因為入手門檻低,所提供的"信任"值也相對較低,而2005年後,在資訊安全逐漸受到重視的影響下,也出現了Class2-4的憑證,像Class 2 憑證則需要額外的個人資訊即可取得;但Class 3 的憑證必須提出請求者的身份證明;而Class 4 是用於政府和機關團體,就需要非常高等級的檢核。 而像是Class 3 憑證就屬於「高安全性」的憑證等級,可應用在高度信任的網路環境,且這類憑證因為簽發之前都需要做身分的驗證和檢查,相對的費用就會是比較高的。


而當然市面上也有很多免費的憑證可供購買,但是相對的信任程度就較低,也會和你需要牽涉的服務內容有關係,像很多手機或是行動裝置如果OS的等級夠高,也會自動移除class 1 的憑證,但如果你只是想做自己產品的測試,想了解是否可以通過HTTPS的檢核時,自己做一個Self-Signed CA也是一個辦法。

校正小編補充:

自簽的SSL一定會被瀏覽器標注不安全,但是如果是內部服務需要,或是手機的API Server需求。
是可以用自簽的CA讓HTTPS跑起來。


不過現在其實如果沒有特別需求,可以使用Let's Encrypt這樣子的免費服務,或是在付費中選取最便宜的CA即可。

部分的Web hosting 虛擬主機服務商其實都已經幫你設定好了,你只要按下開啟,Lets encrypt的憑證就會自動安裝上去。





最後我們利用ssls.com上所販售的商品來做簡單的選購建議。

首先這上面有一些按鈕,各位如果找不到商品等級,可以按一下,會顯示比較多或是比較明確。


Personal 個人 = 一般使用者或是小型公司
Business 商業 = 大型公司
ECOMMERCE 電子商務 = 購物平台
One Domain = 一個網域網址, 包含 domain 自己與 www.domain
Muti-Domain = 同一個憑證可以給不同的domain一起使用,提升彼此之間的關係信賴度(下面例子有會有提到)
Sub Domain = 子網域使用一樣的憑證,例如常見的api.domain 或是 demo.domain 測試用站台的HTTPS
可以排列組合選一個或選擇多個


那我們下面舉一個例子給大家了解為何要選用貴的憑證

SSLS.com這購買憑證的網站,他被Namecheap給收購。用的是EV (greenbar)等級的憑證。這樣在即使跟Namecheap domain name不一樣,卻一樣會顯示 Namecheap, Inc [US],讓人很清楚知道他是Namecheap底下的子公司,讓人比較容易相信SSLS.com所提供的服務。


但是如果你的公司並沒有這樣的需求,那其實買貴的對你也沒有特別的用途,而且憑證是年繳,並不是永久的。而且因為assurance(保險程度) 越高,代表驗證的資訊與花的時間越多。如果沒有商業上的原因,其實一般網站是不太需要的。而且可能光審核就快煩死了。

因此一般選用Personal + One Domain就可以了,不過如果選擇這個的話跟使用Let's Encrypt差異不大。 

如果要包含sub domains的話,就要買 + all subdomains的憑證。或是可以用Let's Encrypt申請每一個sub domain的CA再安裝。當然在意義上是不一樣的,不過這也要看Subdomain的商業用途而定。可以參考這篇文章



















沒有留言:

張貼留言