引入:
如果自己搭建區域網路的應用的話,我們是沒必要向證書頒發機構購買證書的。因為如果什麼證書都能頒發證書的機構買的話,一來價格不菲,二來,在小型區域網路應用中,因為使用者群體都是指定的人,是以不存在問題,是以我們完全可以自己簽發一個安全證書。這種情況下,對于證書的信任就不是靠CA去認可了,而完全取決于區域網路内部彼此的信任,比如我自己簽發了一個證書,如果大家信任我,那麼他們當然就會把私密資料通過SSL通道發送到我架設的伺服器上,如果大家不信任我,那麼他們就不會把私密資料通過SSL通道發送到我架設的伺服器上。
分析:
從上述的簡單說明中可以看出,如果是自簽名的證書的話,證書安全性的校驗不由權威機構負責,而是我們自己來負責。我這裡來實踐下。
首先,我們建立自簽名的證書(這裡尤其要注意的是,CN必須和伺服器所在的計算機名一樣):
比如,我的機器的計算機名是Charles:
那麼我們證書的CN也必須為Charles:
我們檢視證書確定和我們設想一緻:
因為我們的伺服器使用tomcat(假定),是以我們需要在HTTPS的連接配接器(Connector)上來啟用這個證書,為了簡單起見,我們把clientAuth仍然保留預設值"false",來表明我們用的是最簡單的是單向認證。
這時候,我們啟動tomcat,利用https通路首頁,因為我們啟用了https,并且用了自己簽名的證書,是以第一次通路肯定受到浏覽器的保護:
這個合情合理,因為就算在區域網路中,也不是所有人都認識我Charles的,他們憑什麼要把敏感資料發送到我架設的伺服器處理呢?
現在假定區域網路中要通路我的網站的使用者都認識我了,也知道我是個好人,我的網站是正當網站,那麼他們如何讓他們自己的浏覽器解除對于我架設的網站的HTTPS通路限制呢?
顯然就用老辦法,隻要我把我的證書分享給區域網路中每一個信任我的使用者,然後讓他們自己把我的證書檔案導入到他們作業系統的證書管理器的“受信任的根證書頒發機構”就可以了,這樣他們就知道,我頒發的證書對于他們來說是信任的。
為此,我需要先導出證書,因為我這裡證書用的擴充名是.keystore,我必須導出為X.509證書的形式(擴充名為cer或者crt),我的使用者才可以導入這個證書到他們證書管理器。
于是我導出證書為X.509證書:
然後通過某種方式(要麼共享檔案,要麼郵件或者samba伺服器等), 把我的證書分享給大家。
這時候,區域網路内名叫“張三”的使用者隻要打開他作業系統的證書管理器,添加我提供的證書檔案(crt或者cer檔案)就可以了,方法是:右擊“受信任的根證書頒發機構”->證書-> 所有任務->導入 :
然後選擇我提供給張三的證書檔案(cer或者crt檔案):
這時候,張三再通路我架設的伺服器 (https://charles:8443/),就會發現位址欄上的鎖是綠色的了:
總結:
1.面向區域網路的應用無需向證書頒發機構購買證書,使用自簽名的證書就可以了。
2.在區域網路内部利用HTTPS通路自簽名的證書的網站,其網站的合法性不由權威的CA認證,而是由彼此的信任來保證。
3.為了讓伺服器開啟https,必須在對應的連接配接器上配置證書檔案和密碼,并且可以啟用單向加密或者雙向加密。
4.當建立信任後,如果希望區域網路内部的其他使用者通路此站點不受到作業系統的限制,需要讓使用者依次導入對應證書并且将其設為“受信任的根證書頒發機構”。