前言
本篇文章會主要介紹網路中資料安全傳輸,加密演算法,Https如何保證資料傳輸安全,SSL證書決議,CA認證流程,OpenSSL,Nginx中實作高性能Https,
資料加密技術
加密演算法之對稱加密(AES加密) 及在jdk中應用_踩踩踩從踩的博客-CSDN博客_jdk對稱加密
加密演算法之安全hash演算法、RSA非對稱加密演算法分析_踩踩踩從踩的博客-CSDN博客
都是從原理上去分析幾個加密技術,包括對稱加密、一致性hash演算法、非對稱加密,
Http安全性能
HTTP
在瀏覽器中就能清晰的看到,
因此產生了對資料進行加密,加密技術 ;https的產生
摘要演算法
- MD(Message Digest):訊息摘要
- SHA(Secure Hash Algorithm):安全散列
- MAC(Message Authentication Code):訊息認證碼

可以用來保證內容不被篡改:密碼加密、檔案校驗碼

對稱加密
非對稱加密
用在不可信的環境下


Https協議
SSL/STL
- SSL(Secure Socket Layer 安全套接層)是基于HTTPS下的一個 協議加密層,HTTP在傳輸資料時使用的是明文,是不安全的,為了解決這一隱患網景公司推出了SSL安全套接字協議層,SSL是基于HTTP之下TCP之上的一個協議層,是基于HTTP標準并對TCP傳輸資料時進行加密,所以HPPTS是HTTP+SSL/TCP的簡稱,
- TLS(Transport Layer Security)即安全傳輸層協議,保障應用程式之間通信的安全性,SSL 3.0版本改名叫TLS,所以TLS是從SSl轉過來的,
把明文變成密文進行加密,
Https協議架構組成
- 身份認證,認證用戶或服務器,確保資料 發送到正確的客戶機或服務器
- 內容加密,加密資料以防止資料中途被竊取,防止被竊取,
- 資料完整性,維護資料的完整性,確保數 據在傳輸程序中不被篡改

兼容不只是用在http上面,也包括ftp ,mqtt協議呀,redis協議等等,
- SSL/TLS在握手階段依賴數字證書建立安全會話
-
數字證書包含一個非對稱加密生成的公鑰、一個對自己的數字簽名
-
SSL/TLS在傳輸階段使用對稱加密
- 數字簽名依賴非對稱加解密、數字摘要
Https與Http的區別
- https協議需要到CA申請數字證書,
- http是超文本傳輸協議,資訊是明文傳輸;https 則是具有安全性的ssl加密傳輸協議,
- http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,后者是 443,
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、 身份認證的網路協議,比http協議安全
Https如何保證資料傳輸安全
SSL/TLS的握手程序—秘鑰協商
- 在請求連接時,支持的協議版本,支持的加密和壓縮演算法,并產生亂數,給服務端;
- 服務端確定要加密協議版本和加密演算法,服務器的證書,產生亂數 ,回傳給客戶端 生成私鑰
- 公鑰加密后的亂數 編碼改變 握手結束
-
編碼改變通知 ,三個亂數產生的密鑰
-
對稱加密進行資料傳輸
Https協議安全保證的原因
- 其實當客戶端和主機使用非對稱加密方式建立連接后,客戶端和主機已經決定好了在傳輸程序使用的對稱加密演算法和關鍵的對稱加密密鑰,由于這個程序本身是安全可靠的,也即對稱加密密鑰是不可能被竊取盜用的,因此,保證了在傳輸程序中對資料進行對稱加密也是安全可靠的,因為除了客戶端和主機之外,不可能有第三方竊取并解密出對稱加密密鑰!
- 如果有人竊聽通信,他可以知道雙方選擇的加密方法,以及三個亂數中的兩個,整個通話的安全,只取決于第三個亂數能不能被破解,
SSL證書
CA和數字證書
瀏覽器CA認證流程
- 證書頒發的機構是偽造的:瀏覽器不認識,直接認為是危險證書 證書頒發的機構是確實存在的,于是根據CA名,找到對應內置的CA根證 書、CA的公鑰,用CA的公鑰,對偽造的證書的摘要進行解密,發現解不了,認為是危險證書,
- 對于篡改的證書,使用CA的公鑰對數字簽名進行解密得到摘要A,然后 再根據簽名的Hash演算法計算出證書的摘要B,對比A與B,若相等則正常, 若不相等則是被篡改過的,
- 證書可在其過期前被吊銷,通常情況是該證書的私鑰已經失密,較新的 瀏覽器如Chrome、Firefox、Opera和Internet Explorer都實作了在線 證書狀態協議(OCSP)以排除這種情形:瀏覽器將網站提供的證書的序列號通過OCSP發送給證書頒發機構,后者會告訴瀏覽器證書是否還是有效的,

1、2點是對偽造證書進行的,3是對于篡改后的證書驗證,4是對于過期失效的驗證,
OpenSSL
OpenSSL是個多功能命令列工具、他可以實作加密解密、甚至還可以當CA來用、可以讓你創建證書、吊銷證書,
制作證書
準備工具
安裝keytool(jdk自帶)、openssl、nginx、web服務
有兩種方法生成數字證書,一種是用JDK帶的keytool,另一種是用openssl,
大致流程為上面的,
Nginx中配置HTTPS
找到nginx運行的組態檔,將服務器證書servercert.pem、鑰serverkey.pem、ca根證書cacert.pem放到配置目錄下,修改內容如下
http {
# 配置https服務
server {
# 開啟443埠,ssl安全協議
listen 443 ssl;
server_name localhost;
# 配置證書及服務器私鑰
ssl_certificate servercert.pem;
ssl_certificate_key serverkey.pem;
ssl_client_certificate cacert.pem; # 根級證書公鑰,用于驗證各個二級client
ssl_verify_client on; #開啟客戶端證書驗證
# 會話引數的快取,所有作業行程之間共享的快取
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 啟用的密碼
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# SSLv3和TLS協議時,服務器密碼優先于客戶端密碼
ssl_prefer_server_ciphers on;
location / {
root /data/www/;
index welcome.html;
}
}
}
Nginx https 雙向認證 - i野老i - 博客園 (cnblogs.com)

這在官方核心檔案中就有配置方式
Https服務的優化
- 1. 將作業行程的數量設定為等于處理器的數目,worker_processes
- 2. 啟用維持生命的連接,keepalive_timeout
- 3. 啟用共享會話快取,禁用內置會話快取,ssl_session_cache shared:SSL:10m; off,禁用、 none,客戶端可重用服務端不快取builtin,在openssl中重構快取,`builtin`[:`size`] shared,在worker行程間共享的快取,`shared`:`name`:`size`
- 4. 增加會話生存期(默認為5分鐘),ssl_session_timeout
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/344113.html
標籤:其他
