1. 程式人生 > >Https系列之一:https的簡單介紹及SSL證書的生成

Https系列之一:https的簡單介紹及SSL證書的生成

secret 兩種 人工 bin www out ext 隱私 發現

一:本文的主要內容介紹

https的介紹
SSL證書的介紹
自簽名SSL證書介紹及生成方法
CA證書介紹及申請

二:https的簡單介紹

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL(Secure Socket Layer)。

SSL協議提供的服務主要有:
1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器
2)加密數據以防止數據中途被竊取
3)維護數據的完整性,確保數據在傳輸過程中不被改變

關於https的介紹,網上有很多更詳細更專業的資料,在此只作簡單介紹,讓大家有一些概念性的了解,並最終完成android端和服務器端的https的實現。

三:SSL證書的作用

SSL證書是數字證書的一種,類似於駕駛證、護照和營業執照的電子副本。
SSL證書的兩大作用:數據加密和身份認證
SSL 證書遵守 SSL協議,通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道
一個有效、可信的 SSL 數字證書包括一個公共密鑰和一個私用密鑰。公共密鑰用於加密信息,私用密鑰用於解譯加密的信息。因此,瀏覽器指向一個安全域時,SSL 將同步確認服務器和客戶端,並創建一種加密方式和一個唯一的會話密鑰。它們可以啟動一個保證消息的隱私性和完整性的安全會話。

四:關於自簽名SSL證書

所謂自簽名證書,就是自己頒發給自己的證書 ,所以頒證的主體是不可信任的
自簽證書是不會被瀏覽器信任的證書的,用戶在訪問自簽證書時,瀏覽器會警告用戶此證書不受信任,需要人工確認是否信任此證書,如下圖:
技術分享圖片

既然自簽證書是不可信任的,那為何還有人包括12306也在用自簽證書呢?
主要原因是:
1)自簽證書是免費的
2)自簽證書相對申請CA證書,流程更簡單
3)自簽證書同樣可以對數據進行加密
4)自簽證書的有效期可以設置很長,免去續簽的麻煩
5)自簽證書更方便測試,比如說你想生成多少個不同服務器ip的都可以
所以對於一些個人開發者來說使用自簽證書可能會更方便,只要你能接受別人瀏覽你網站時彈出的提醒:不安全

五:關於CA 簽名SSL證書

相對自簽證書的自己給自己頒證,由權威的證書授權機構(Certificate Authority)頒發的簽名證書,我們稱之為:CA證書
CA證書保證書持有者的身份和公鑰的擁有權
瀏覽器對CA證書是信任的,如下圖:
技術分享圖片

六:自簽名SSL證書的生成

自簽證書雖然提示:不安全。但還是有很多上面已提到的好處,所以下面先說說自簽證書的生成,主要使用Java JDK下的:keytool.exe
1:先下載安裝Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2:安裝完後,根據實際的路徑找到keytool.exe,如我的在此路徑:C:\Program Files (x86)\Java\jdk1.8.0_101\bin\keytool.exe

3:生成keystore。打開命令行(cmd),去到keytool所在的路徑,運行:

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore d:\mykeystore\keystore.p12 -validity 3650  -ext san=ip:192.168.100.132 -dname "CN=garyyan, OU=mycompany, O=mycompany, L=gd, ST=gd, C=china"

此命令中間只需要輸入密碼,就能生成keystore,假設密碼是:123456
其中:
1)keystore可理解為一個數據庫,可以存很多個組數據。
每組數據主要包含下面兩種數據:
a:密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)
b:可信任的證書實體(trusted certificate entries)——只包含公鑰
2)-keystore d:\mykeystore\keystore.p12,指定在d:\mykeystore(先要手動創建此文件夾),生成keystore:keystore.p12
3)-alias tomcat,為其指明在keystore中的唯一的別名:tomcat ,因為keystore中可能還存有其它的別名,如:tomcat 2
4)-storetype PKCS12指明密鑰倉庫類型是PKCS12
5)-keyalg RSA,指定加密算法,本例中的采用通用的RAS加密算法
6)-keysize 2048指定密鑰的長度為2048
7)-validity 3650 指定證書的有效期為3650天
8)-ext san=ip:192.168.100.132請根據你的服務器的IP地址設置,如果不進行設置,客戶端在訪問的時候可能會報錯
9)-dname “CN=garyyan, OU=mycompany,O=mycompany,L=gd, ST=gd, C=china”
其中:”CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼)”,我在測試的過程中發現隨便填就行

4:導出公鑰證書(主要用於客戶端):
運行命令:

keytool -export -keystore d:\mykeystore\keystore.p12 -alias tomcat -file mycer.cer -storepass 123456

其中:
1)-keystore d:\mykeystore\keystore.p12 是指上面的keystore文件
2)-alias tomcat是指定別名為tomcat的那一組
3)-file mycer.cer指定在當前目錄生成名為mycer.cer的證書
4)-storepass 123456是上面生成keystore 所用的密碼

七:CA證書的申請

有很多網站能申請CA證書,如沃通,騰訊,阿裏雲等,大家可根據自己的喜好去申請
CA證書又分免費和不同價錢的,當然一分錢一分貨,對於我們個人開發者來說,免費的CA證書就足夠了,
我個人主要是想解決當別人訪問我的https網站時彈出“不安全”的這個問題,因為“不安全”這個提示被人感覺很像釣魚網站。

目前申請CA證書基本上都要收費,而且一般是有時效性,需要定期去維護證書,略顯麻煩。

具體的申請流程請參見各大平臺網站,本文暫不累述。

至此,”Https系列之一:https的簡單介紹及SSL證書的生成”已完成。

本文摘自顏家大少的博客 :http://blog.csdn.net/gary_yan

Https系列之一:https的簡單介紹及SSL證書的生成