2016年5月25日 星期三

全世界最便宜的SSL憑證加簽


全世界最便宜的SSL憑證加簽

台灣SSL憑證加簽公司因為市場小,所以SSL憑證加簽,看服務類型一年動輒數萬到超過十萬都有,一般來說,憑證加簽有針對單一網域名稱加簽,價格較便宜,例如針對bookclub.fmj.com.tw這個網域名稱加簽,也可以針對一個網域的所有子網域名稱加簽,價格會較貴,例如針對*.fmj.com.tw加簽,則www.fmj.com.tw或bookclub.fmj.com.tw或fmj.com.tw下的任意子網域名稱都同時有效。
全世界最便宜的SSL憑證加簽,約落在一年美金3-5元之間,通常一次購買三年或以上,才享此優惠價格,前一陣子因為要做FB的APP,需要https連線,所以趕緊去申請了一個當時全球最便宜之一的SSL憑證加簽,所以這篇文章的範例,是JSP網站使用COMODO(柯摩多)憑證加簽作範例,一年只要4.99美元,一次買三年,三年合計不到台幣500元,安裝了之後,我其實蠻滿意的,唯二不太開心的是,原本預計一個小時內會買完並且安裝完,結果如預期般的遇到挫折,花了超過三小時才安裝完,而且才剛裝完,又看到另外一家一年只要3.xx美元...

1.申請前要先做的準備工作

由於COMODO線上申請憑證,他需要確認你擁有所申請網域名稱的控制權,以本文章範例來說,我要申請bookclub.fmj.com.tw的SSL憑證加簽,所以我要具有以下幾個控制權之一,且隨便一個即可,例如我要能收到 admin@bookclub.fmj.com.tw之EMail信箱的認證信函,至於信箱admin也可以挑選其他例如administrator、postmaster、hostmaster或webmaster之類的一堆象徵網域系統管理者名稱的信箱名字,或者呢,你可以將COMODO提供的認證檔案,放到bookclub.fmj.com.tw網站的根目錄下,選擇讓COMODO的測試程式透過http或https連上來認證,又或者呢,你要有添加bookclub.fmj.com.tw網域名稱下子網域名稱的權力,這樣COMODO會給你一個看似亂碼組成的子網域名稱,你必須將他加到你的DNS伺服器裡,變成例如34857394CBA.bookclub.fmj.com.tw,但由於DNS伺服器通常有更新時間的問題,所以認證時間可能要很久,最後,你要有接受購買訊息通知的EMail信箱,並請再準備一張線上付費的信用卡。

2.使用java發SHA2的憑證與加簽申請CSR檔

SHA1的憑證已經被大多數的瀏覽器認定為不安全,所以除非有特殊要求,建議你發SHA2的憑證,其keyalg和sigalg參數範例如下,validity是憑證有效天數,以下範例請自行修改你的網域名稱與路徑等參數,SHA2的keysize要用2048,alias是憑證的名字,keypass和storepass則是憑證和憑證儲存檔案的存取密碼,當然,發憑證的這台電腦,要安裝java才行,且為了發SHA2憑證,不要使用太老舊的java版本(筆者試過java7與8都可以),以下是單獨的一行指令,可以用Windows的命令提示字元來執行。


"C:/Program Files/Java/jre7/bin/keytool" -keysize 2048 -genkey -alias tomcat -keyalg RSA -sigalg SHA256withRSA -validity 36500 -dname "CN=bookclub.fmj.com.tw,OU=it,O=fmj,L=taipei,S=taiwan,C=tw" -keypass changeit -keystore "C:/fmj.keystore" -storepass changeit


附帶一提,此處憑證儲存檔案名稱取名為例如fmj.keystore,儘量不要用預設的憑證名稱.keystore,因為這種只有附檔名的檔案名稱在Mac或Linux上都是屬於隱藏檔,使用不太方便, 憑證發完了,接著發憑證加簽請求CSR檔案:
"C:/Program Files/Java/jre7/bin/keytool" -certreq -keyalg RSA -alias tomcat -file "C:/fmj.csr" -keystore "C:/fmj.keystore"
大功告成,fmj.csr這個文字檔,就是憑證加簽請求檔。

3.上Cheap SSL網購買COMODO憑證

連到以下CheapSSL網址https://cheapsslsecurity.com/,如下圖,如果要加簽含有多個子網域的網域名稱,才選Wildcard Certification,此處範例只要加簽一個不含子網域的網域名稱,例如bookclub.fmj.com.tw,就選Domain Validation,下圖有多家憑證加簽公司,選最便宜的COMODO,按下BUY NOW按鈕購買。
如下圖,挑選購買3年的憑證加簽,則3年後要重新續約,否則憑證加簽會失效,選了要加簽的憑證數量(此處為1個),按下Add TO CARD按鈕加入購物車。
如下圖,填入個人聯絡資料與信用卡付費資料,重點是電子郵件信箱要填正確,等等要去收CheapSSL寄給你的信,信中會提供下一步驟的指示,下圖確認要購買的項目與數量後,就可以按下PLACE ORDER按鈕購買憑證加簽,按下此按鈕後,又會跳出一個畫面(此圖省略)要求你再確認一次,就再按一次確認就可以了。
接著跳出畫面如下,僅是確認你所購買的項目無誤而已

4.由CheapSSL發的EMail連結到其網站貼入憑證加簽申請CSR檔案

做完步驟3,此時去收信應該CheapSSL的信已經立馬寄到了,筆者收到兩封EMail,一封是付費收據,一封有提供超聯結給你連入他的系統,以便貼入前面步驟2所產生的CSR憑證加簽申請檔案,連入他的系統畫面如下,可以看到你所購買的憑證項目。
接著,如下圖,畫面左方挑選ORDERS\incomplete Orders目錄,就會看到未完成的申請項目,也就是Status欄位顯示Pending的憑證項目,按下畫面中的GENERATE CERT NOW按鈕來進行接下來的憑證加簽檔案上傳步驟。
如下圖,欄位1選擇是要續約還是申請新的憑證加簽,此處選擇New代表申請新的憑證加簽,欄位2選擇你要如何證明你擁有所申請網域名稱的權限,筆者選擇最簡單的HTTP File-Based,就是等等讓他給我一個電子檔案下載,下載後我會將這個電子檔案放到我 bookclub.fmj.com.tw的根目錄下,讓他遠端連過來認證。
接著,將前面步驟2產生的CSR檔案用例如Windows的記事本打開,將其內所有的內容複製貼到下圖欄位3裡面,然後在欄位4選擇你所使用的網頁應用程式伺服器,雖然這個步驟可以省略,但此處筆者還是選擇了我所使用的網頁應用程式伺服器Tomcat,最後按下CONTINUE按鈕繼續往下。
接著畫面如下,利用按下Download Auth File按鈕來下載上圖欄位2認證網域名稱擁有權的電子檔案(檔名是一堆亂碼例如287342908374.txt),我將他放到我的網站bookclub.fmj.com.tw的根目錄下以便受檢,如果他檢查不到,你也可以自行檢查看看,例如我可以自行使用瀏覽器連上我的網址http://bookclub.fmj.com.tw/287342908374.txt,看看是否有成關連上這個電子檔,檢查速度會很快在背後偷偷自動完成,下圖欄位1與欄位2是由你所上傳的CSR檔案解析出來的資料,僅供你再次確認,欄位3可以填入這個憑證申請管理者與工程師的聯絡資料,除非有需要分人負責,否則都填入你的聯絡資料就可以了。
至於下圖欄位4只是確認你知道購買憑證加簽的權利義務以及你擁有15天的不滿意退費服務,應該預設都是勾選的,按下CONTINUE按鈕繼續往下。
接著畫面如下圖,會要求你替此次購物經驗評分,隨便評一下吧。
接著下圖畫面選擇Yes讓他能夠後續追蹤你的滿意程度(否則他會跳出更多煩人的視窗說服你選Yes),既然同意讓他後續追蹤,就填入你的名字與電子郵件信箱,按下SUBMIT FEEDBACK按鈕上傳你的意見回饋。
大功告成啦,接著如下圖,按下紅色打叉小按鈕繼續往下。
接著畫面如下,又是確認再確認就可以了,倒是如果你前面忘了下載那個確認你網域名稱擁有權的電子檔案,下面的畫面還可以再下載一次,如果前面你已經正確的做過了,此處就不用再做一次。
此時,你又要去收信了,這次不是CheapSSL寄信給你,是COMODO寄加簽完成的憑證給您啦。

5.由COMODO發的EMail附件下載加簽完畢的憑證

下圖是我的EMail信箱,前兩封是這次COMODO寄給我的,一個是跟我說我可以去下載COMODO的安全認證標章圖片放到我的網頁裡,我只能說,管他的,但是如果你有需要的話,是可以照著做,另一封就是寄來加簽完成的憑證以及COMODO的根憑證與中繼憑證,點進去下載他的附件吧。
至於下圖的第三和第四封EMail,是前面第四步驟CheapSSL發給我的EMail讓我連結到他網站貼入憑證加簽申請CSR檔案。
EMail點進去,畫面如下,申請不同的憑證類別,所需的中繼憑證數量可能不同,此範例的EMail附件是一個ZIP壓縮檔案,解壓後是一個根憑證,兩個中繼憑證,和一個這次所申請我網域名稱的加簽憑證,而根憑證和中繼憑證,基本上都可以在COMODO的公開網站裡下載得到。

6.安裝加簽憑證到你的伺服器上

往下做之前,請先將憑證儲存檔案如此處的fmj.keystore備份,做錯了就將錯誤的憑證儲存檔案刪除掉就好了,重新複製一個原始的憑證儲存檔案來重新做,前面說到EMail附件解壓縮後有以下四個憑證檔案:

Root CA Certificate - AddTrustExternalCARoot.crt
Intermediate CA Certificate - COMODORSAAddTrustCA.crt
Intermediate CA Certificate - COMODORSADomainValidationSecureServerCA.crt
Your PositiveSSL Certificate - bookclub_fmj_com_tw.crt

我們要將這四個憑證都匯入步驟二所發的憑證儲存檔案fmj.keystore中,因為這個步驟要使用java所提供的龜毛程式keytool,我們先講COMODO官方網站所提供錯誤且keytool不接受的方法,這也是為什麼我花了超3小時才搞定這個憑證的原因,官方說明如下:


Certificate Installation: Java Based Web Servers (Tomcat) using keytool
Installing SSL Certificate Chain (Root, Intermediate(s) and the End Entity)

所以我使用Windows的命令提示字元照著做(這是錯誤示範):
1. Import Root Certificate (這是錯誤示範)
"C:/Program Files/Java/jre7/bin/keytool" -import -trustcacerts -alias AddTrustExternalCARoot -file "C:/db/ca/fmj/AddTrustExternalCARoot.crt" -keystore "C:/db/ca/fmj/fmj.keystore"

2. Import Intermediate(s) (這是錯誤示範)
"C:/Program Files/Java/jre7/bin/keytool" -import -trustcacerts -alias intermediate_filename -file "C:/db/ca/fmj/COMODORSAAddTrustCA.crt" -file "C:/db/ca/fmj/COMODORSADomainValidationSecureServerCA.crt" -keystore "C:/db/ca/fmj/fmj.keystore"

3. Import Entity/Domain certificate (這是錯誤示範)
"C:/Program Files/Java/jre7/bin/keytool" -import -trustcacerts -alias tomcat -file "C:/db/ca/fmj/bookclub_fmj_com_tw.crt" -keystore "C:/db/ca/fmj/fmj.keystore"

結果就出現錯誤,訊息如下:
金鑰工具錯誤: java.lang.Exception: 無法從回覆中將鏈建立起來
我原本想,這個錯誤和上次申請的那家godaddy憑證加簽是一樣的,是因為他所提供的根憑證過期造成的,結果不是,因為我去COMODO重新下載最新的根憑證重新匯入,錯誤訊息還是一樣,最後讓我 google 到以下網站的方法就成功了:

https://community.igniterealtime.org/docs/DOC-2208

方法就是,將所有憑證依照根憑證、中繼憑證與加簽憑證的正確順序,貼到同一個文字檔案中(我自己取了一個檔名combine.crt),以 enter 分隔每個憑證的內容,再直接匯入這個新的文字檔到憑證儲存檔案fmj.keystore裡,成功了!沒有依序匯入憑證時造成憑證彼此無法互相關聯的錯誤訊息,指令範例如下:

"C:/Program Files/Java/jre7/bin/keytool" -import -keystore "C:/db/ca/fmj/fmj.keystore" -alias tomcat -file "C:/db/ca/fmj/combine.crt"

接下來,這個憑證儲存檔案fmj.keystore,就可以搬到你的網頁應用程式伺服器上,作為SSL通訊協定所使用的憑證啦,這個部分應該讀者已經很熟悉了,就不繼續寫下去了。


參考資料

https://community.igniterealtime.org/docs/DOC-2208