HTTPS = HTTP + TLS/SSL
SSL:Secure Sockers Layer,安全套接層
TLS:標準化之後的SSL
提供隱私和數據兩個通信實體之前的完整性
由兩層組成:TLS記錄協議(TLS Record)和TLS握手協議(TLS Handshake)
SSL的核心在於提供安全可信的通訊
實際應用中,通常有單向認證和雙向認證兩種實現方式
1 客戶端:發送客戶端SSL版本信息等
2 服務端:返回SSL版本信息等及服務器公鑰
3 客戶端:校驗證書是否合法
驗證證書是否過期、CA是否可靠等
4 客戶端:發送對稱加密方案給服務端
5 服務端:選擇加密方式
6 服務端:將加密方案 明文 發送給客戶端
7 客戶端:產生隨機碼,生成對稱加密密鑰,使用服務端公鑰加密,發送服務端
8 服務端:使用私鑰解密,獲得對稱加密密鑰
9 握手結束,對稱加密,安全通信
1 客戶端:發送客戶端SSL版本信息等
2 服務端:返回SSL版本信息等及服務器公鑰
3 客戶端:校驗證書是否合法
4 客戶端: 將自己的證書和公鑰發送至服務端
5 服務端: 校驗客戶端證書,獲得客戶端公鑰
6 客戶端:發送對接加密方案給服務端
7 服務端:選擇加密方式
8 服務端:將加密方案 使用客戶端公鑰加密後 發送給客戶端
9 客戶端:使用私鑰解密,獲得加密方式,產生隨機碼,生成對稱加密密鑰,使用服務端公鑰加密後,發送給服務端
10 服務端:使用私鑰解密,獲得對稱加密密鑰
11 握手結束,對稱加密,安全通信
SSL核心的概念:ca、私鑰、公鑰、證書
私鑰默認格式為pkcs1,壹個簡化的私鑰生成命令:
openssl genrsa -out private.pem 3072
java對私鑰格式有 要求 ,需要轉換為pkcs8格式,轉換命令:
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform PEM -nocrypt -out private-pkcs8.pem
認證中心,第三方認證提供方,為證書提供可靠性認證
開發過程中壹般使用自簽發證書進行測試,再使用正式簽發的證書
CA在使用時,主要是使用ca證書,ca證書由ca key簽發而來
要素: CA私鑰、CA CSR、簽發證書
中間根據提示輸入 Country Name 、 State or Province Name 等等
組成:CA根證書、簽發客戶端證書
使用 OpenSSL 創建客戶端證書時,請註意
創建私鑰時,請將長度指定為 4096
創建證書時,對於 -extensions 參數,指定 usr_cert
生成私鑰
openssl genrsa -out product.key 3072
生成證書簽發請求
openssl req -new -key product.key -out product.csr
將證書簽發請求發送至CA,簽發證書,這壹步壹般無法感知,大概的意思就是執行下面的簽發命令
openssl ca -in product.csr -out product.crt -days 365
上面這壹條還是隱藏了很多細節,再看下面的
簽名過程需要 CA 的證書和私鑰參與,最終頒發壹個帶有 CA 簽名的證書
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in product.csr -out product.crt
這個 product.crt 就是正式可以使用的證書了
TLS單向認證和雙向認證的區別