最近越來越多的瀏覽器開始在使用者瀏覽網站時,幫助使用者檢查網站的安全性,其中一個檢查是,若是使用者要在網站中輸入資料,如果這個網站沒有加密(https)的話,就會被瀏覽器標示不安全的網站,提示使用者正在輸入的資料在傳輸時,很有可能會被竊取。
所以很多人都會嘗試申請憑證,但很多人在申請的時候因為檔案很多,有時候會搞不懂到底什麼是金鑰,什麼是憑證與 CSR ,搞的最後又必須重新申請,浪費時間。
網頁加密
在你申請完憑證都裝好之後,你的網站就可以讓使用者透過加密的方式瀏覽你的網站,如何知道自己的網站是否有加密?最簡單的檢查方法就是看網址,如果你的網址是
http://www.example.com
就是沒有加密的,有些瀏覽器只會顯示 www.example.com,並沒有顯示 http,這時候只要看 www 之前有沒有一個綠色的鎖頭,如果沒有,那就是沒有加密的,或是你可以試試看自己輸入 https://www.example.com(把 example.com 換成你的域名),看一下瀏覽器有沒有出現綠色鎖頭。
SSL 基礎
種類
- 分類 1:一般、進階與商用(EV)
- 分類 2:單一位址、萬用位址與多重位址
分類 1 與 分類 2 各挑一種,加起來就是一般市面上常見的憑證種類,分類 1 的區別在於憑證對購買人的驗證方式( 不是瀏覽你網站的人 ),分類 2 的區別在於一張憑證可以支援多少個網址。
分類 1:一般、進階與商用的區別
一般憑證多半都是最簡單的驗證方式,譬如驗證 DNS 擁有權,進階板的憑證會在驗證的時候請你遞交紙本文件,譬如個人身份證副本、公司營登證等等,提高了驗證的手續跟嚴謹性,最後是商用(EV 或稱延伸驗證),這種憑證在申請的時候除了需要遞交紙本文件之外,還會有人實際打聯絡電話,去詢問申請公司是否真實存在,並詢問相關聯絡人等資訊。各家對於名稱都會不同,有的可能把進階板名稱改成加強板,或是安全板等等,”進階板” 三個字也不是標準名稱; 當然 EV 商用版的名稱也是如此,不過你大約了解驗證的不同即可。
分類 2:單一位址、萬用位址與多重位址的區別
單一位址就是你申請的這張憑證只能使用在一個域名上,但通常是裸域名(example.com)在加上(www.example.com)。
萬用位址就是你申請的這張憑證可以用很多個子域名,都是同一個域名,例如:*.example.com 、前面的 * 號要使用任何一個子域名都可以。
a1.example.com www.example.com w3.example.com ooooooooo.example.com
適用:有多個子域名、或是提供客戶專屬網址的廠商(例如:kktix)。
多重位址就是你申請的這張憑證可很多不同域名,但通常都有數量限制,譬如一個憑證可以放 3、5、10、20 個位址:
www.example.com www.example.com.tw www.example.club w3.checkout.tw abc.yourname.shop myname.blog
適用:擁有多個不同域名的人。
申請流程、所需資訊
在申請之前,我先提醒你一個重要的事情,請把以下幾個東西妥善保存,並且用你看得懂的檔案名稱為這些長得很像但是不同作用的檔案命名:
- 私有金鑰 – Pirvate Key
- 簽署要求 – Certificate Signing Request(CSR)
- 憑證 – CRT
- 中繼憑證 – PEM or CRT
整個 SSL 申請完成後,你應該會有這四個檔案,因為他們的名稱都非常相似,不熟悉的人可能會搞混甚至搞不懂,又可能會亂丟不知道存在哪個目錄,所以請分別將這四個階段的檔案自己標示清楚。
建議你建立一個專門的目錄,以網域名稱作為檔案識別,譬如資料夾叫:blog.rsync.tw_SSL
流程
- 申請:產生私有金鑰 -> 產生簽署要求 -> 將簽署要求傳給廠商 -> 付款 -> 等待驗證
- 安裝:取得憑證 -> 下載中繼憑證 -> 上傳到伺服器 -> 設定網頁伺服器(Apache) -> 完成
產生私有金鑰
私有金鑰是整個 https 加密過程中最重要的檔案,千萬不要把他亂存,也不要傳給任何一個人或是上傳到其他網站。
Linux 環境產生方式:
openssl genrsa -out privatekey.key
Windows 環境產生方式:下載 OpenSSL 產生。
產生完之後,用文字編輯軟體(筆記本) 打開後會看到類似如下內如:
-----BEGIN RSA PRIVATE KEY----- (很多亂碼) -----END RSA PRIVATE KEY-----
RSA 是密鑰的演算法,不同的演算法可能會在這邊有不同的標示,PRIVATE KEY 指的是私有金鑰,中間亂碼的是內容,同常我們在複製的時候會包括 —–BEGIN/END RSA PRIVATE KEY—– 一同複製。這個檔案就是你的私有金鑰,請標示清楚並妥善保存。
產生憑證簽署要求(CSR)
接者你就可以產生 CSR,為什麼你要產生 CSR 呢?因為剛剛有說私有金鑰不能交到任何人手上(包括廠商),那憑證中心要怎麼簽署你的身份跟金鑰,就是透過 CSR(憑證簽署要求)來完成。
CSR 的原理就像你用文字檔打了一份關於你公司/個人資料的文件,然後把 Public Key(公開金鑰)跟這份文件一起壓縮程一個檔案,傳給憑證中心,憑證中心解開後,就可以看到你的資料跟 Public Key,他會驗證身份資料,透過自動驗證、紙本或是電話(在”種類 – 分類 1 “的部份有提到)的方式來驗證,沒問題後,就會把你的 Public Key 進行簽署,然後把簽署後的資料傳回給你,這就是最終憑證。
注意!因為工具的方便性,所以在產生 CSR 的時候可以順便一起產生 Private Key,所以很多教學會直接教你產生 CSR,結果大家都不知道 Private Key 丟到哪裡去了~
Linux 環境產生 CSR(一同產生 Private Key),我建議你在產生 CSR 的時候用你的域名來當檔名,這樣就可以清楚知道 Key 與 CSR :
$ openssl req -nodes -newkey rsa:2048 -sha256 -keyout blog.rsync.tw.key -out blog.rsync.tw.csr Generating a 2048 bit RSA private key .....+++ ............+++ writing new private key to 'privatekey.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:TW State or Province Name (full name) [Some-State]:Taiwan Locality Name (eg, city) []:Taipei Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Ltd Organizational Unit Name (eg, section) []:Technical Common Name (e.g. server FQDN or YOUR name) []:blog.rsync.tw Email Address []:haway@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
中間需要填寫一些資訊,千萬不要亂填
欄位 | 說明 | 範例 |
---|---|---|
Country Name (2 letter code) [AU] | 二字元國家代碼 | TW |
State or Province Name (full name) [Some-State] | 州或省 | Taiwan |
Locality Name (eg, city) [] | 城市 | Taipei |
Organization Name (eg, company) [Internet Widgits Pty Ltd] | 組織或公司名稱 | (填寫公司英文名稱) |
Organizational Unit Name (eg, section) | 申請的部門名稱,如果你是申請 EV 等級的憑證,他可能會電話要求轉接到該部門,不要亂填 | Technical |
Common Name (e.g. server FQDN or YOUR name) [] | 簽署名稱,就是你的網址 | blog.rsync.tw |
Email Address [] | 電子信箱位址 | haway@example.com |
A challenge password [] | 密碼,設定之後一定要記住 | (不設定,直接 enter) |
An optional company name [] | 其他的公司名稱 | (不設定,直接 enter) |
完成之後你就會得到 blog.rsync.tw.key 與 blog.rsync.tw.csr 這兩個檔案(當然檔名應該是你的網址)。
blog.rsync.tw.csr 這個檔案就是你要遞交給憑證中心簽署的資料(CSR 檔),簽署完成之後這個檔案就沒用了,
但 blog.rsync.tw.key 要妥善保存。
安裝憑證
憑證中心收到你的 CSR 檔之後,就會進行驗證、收費,一段時間後就會把憑證簽發給你,這時候你就可以安裝憑證。
安裝憑證的時候你只需要兩個(或三個)東西,你的私有金鑰、憑證中心簽發給你的憑證,這兩個是必備,憑證中心可能會再給一個中繼憑證,所以是三個:
- 私有金鑰 – blog.rsync.tw.key
- 憑證中心簽發回的憑證 – name.crt
- 中繼憑證 ca_name.crt 或 ca_name.pem
把這三個檔案都上傳到你的伺服器,設定 Apache 的路徑:
- SSLCertificateKeyFile 指向你的私有金鑰檔案位置
- SSLCertificateFile 指向你的憑證檔案位置
- SSLCACertificateFile 指向你的中繼憑證檔案位置
重新啟動網頁伺服器,就完成了!用 https 連一下你的網站就知道是不是成功了。
中繼憑證
什麼是中繼憑證呢?憑證驗證機構基本上也是由根憑證所認證的,驗證機構與根憑證之間也會有一對金鑰,驗證機構通常不會把這主金鑰拿去簽署客戶的憑證,而會透過主金鑰去簽出一對副金鑰,然後用副金鑰來簽署客戶的憑證,這樣若是主金鑰被盜用 (還是有資安的風險),替換主金鑰後,只需要用新的主金鑰簽署一次副金鑰即可,就不須要將所有客戶的憑證重新簽署。副金鑰替換時,不需要對上層更新主金鑰。
撤銷憑證
憑證撤銷是用來使憑證無效化的緊急處理程序。如果你發現你的憑證被盜用,或是伺服器最近有被入侵,避免安全起見,你應該把有問題的憑證重新產生,然後立刻撤銷舊憑證。一旦憑證撤銷後,就不能再次建立相同的憑證。