SSL雙向認證以及證書的製作和使用-https+客戶端身份驗證
-
客戶端認證伺服器:
正規的做法是:到國際知名的證書頒發機構,如VeriSign申請一本伺服器證書,比如支付寶的首頁,點選小鎖的圖示,可以看到支付寶是通過VeriSign認證頒發的伺服器證書:
我們用的操作系統(windows, linux, unix ,android, ios等)都預置了很多信任的根證書,比如我的windows中就包含VeriSign的根證書,那麼瀏覽器訪問伺服器比如支付寶www.alipay.com時,SSL協議握手時伺服器就會把它的伺服器證書發給使用者瀏覽器,而這本伺服器證書又是比如VeriSign頒發的,自然就驗證通過了。
國內許多公司的做法:自己做根證書CA(自己充當類似於VeriSign的角色),然後讓使用者下載安裝根CA(當然了,其中只含有公鑰)到機器中,12306就是這樣乾的(SRCA就是12306的根證書),然後再自己給自己頒發伺服器證書,這樣使用者機器上也有他的CA,伺服器發來的伺服器證書也是這本CA頒發的,當然也順利通過了。
-
伺服器認證客戶端:
伺服器端通過根CA給客戶端頒發客戶端證書,在製作客戶端證書時加上和機器相關的資訊就可以保證在特定的時候某個帳號只能在這臺機器上和伺服器交換報文,比如我們用支付寶時必須下載安裝數字證書時,可以命名這本證書叫"我的筆記本"或者是"公司電腦"之類的,就是支付寶給使用者頒發證書,只能在這臺機器上用,你換了機器就必須重新申請。建立SSL連線時,先是伺服器將自己的伺服器證書發給客戶端,驗證通過後,客戶端就把自己的客戶端證書發給伺服器進行驗證,如果通過,再進行後面的處理。
下面來說說如何自己製作根CA證書以及伺服器證書和客戶端證書:
客戶端安裝伺服器根證書ca.crt到客戶端信任證書庫中,伺服器端安裝伺服器根證書ca.crt到伺服器信任證書庫中。
SSL握手時,伺服器先將伺服器證書server.p12發給客戶端,客戶端會到客戶端信任證書庫中進行驗證,
因為server.p12是根證書CA頒發的,所以驗證通過;然後客戶端將客戶端證書client.p12發給伺服器,同理因為client.p12是根證書CA頒發的,所以驗證通過。
先用xca建立一本ca證書
xca開啟的介面
依次File, New DataBase,選擇xdb檔案儲存路徑,再輸入密碼
切換到Certificates頁面,點選New Certificate
出現如下介面
因為要建立根證書,這裡選擇序號為1的自認證證書,簽名演算法選擇SHA 256,證書模版選擇預設CA,再點選Apply all(這個不能漏)如下所示:
再切到Subject頁面,填好各個欄位,都可以隨便填
再點選Generate a new key生產私鑰
最後點選OK,CA證書做好了,有效期預設10年
將根證書匯出成只包含公鑰的證書格式,這本根證書就是放在網站上供使用者下載安裝,或主動安裝到客戶機器中的:
製作伺服器證書、客戶端證書和製作CA證書差不多,只有兩個地方不一樣:
-
選擇已經制作好的根CA,然後點選New Certificate
簽名時,選擇使用根證書,這裡是hangzhou進行簽名頒發,然後證書模版選擇伺服器(製作客戶端證書就選擇HTTPS_client),其他都和製作根證書一樣,然後點選Apply all(這個一定不能忘),然後再切到Subject、Extension頁面填寫相應的東西就OK了
製作完成:
然後再將伺服器證書匯出來,選擇p12格式
同理製作客戶端證書,並將之匯出,也是p12格式的證書,包含私鑰