SSL Socket 雙向認證
一、簡介
SSL協議採用數字證書以及數字簽名進行雙端實體認證,用非對稱加密演算法進行金鑰協商,用對稱加密演算法將資料加密後進行傳輸以保證資料的保密性,並且通過計算數字摘要來驗證資料在傳輸過程中是否被篡改和偽造,從而為敏感資料的傳輸提供了一種安全保障手段。
SSL協議提供的服務:
(1)、認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器
認證使用者和伺服器的合法性,使它們能夠確信資料將被髮送到正確的客戶機和伺服器上,客戶機和伺服器都有各自的識別號,這些識別號由公開金鑰進行編號,為驗證使用者是否合法,SSL協議要求在握手交換資料時進行數字認證,以此確保使用者的合法性。
(2)、加密資料以防止資料中途被竊取
SSL協議所採用的加密技術即有對稱加密技術,也有公開的金鑰技術,在客戶機和伺服器進行資料交換前,交換SSL初始握手資訊,在SSL握手資訊中採用了各種加密技術對其進行加密,以保證其機密性和資料的完整性,並且用數字證書進行鑑別,這樣就可以防止非法使用者進行破譯。
(3)、維護資料的完整性,確保資料在傳輸過程中不被改變
SSL協議採用Hash函式和機密共享的方法提供資訊的完整性服務,建立客戶機和伺服器之間的安全通道,使所有經過SSL協議處理的業務在傳輸過程中能全部完整準確無誤的到達目的地。
二、SSL體系架構
SSL協議位於TCP/IP協議模型的網路層和應用層之間,使用TCP來提供一種可靠的端到端的安全服務,它是客戶/伺服器應用之間的通訊不被攻擊竊聽,並且始終對伺服器進行認證,還可以選擇對客戶進行認證,SSL體系架構如下圖-1所示:
圖-1
SSL通訊中,首先採用非對稱加密交換資訊,使得伺服器獲得瀏覽器提供的對稱加密的金鑰,然後利用該金鑰進行通訊過程中資訊的加密和解密,為了保證訊息在傳遞過程中沒有被篡改,可以加密HASH編碼來確保資訊的完整新,SSL通訊過程如下圖-2所示:
圖-2
一般情況下,當客戶端是保密資訊的傳遞時,客戶端不需要數字證書驗證自己身份的真實性,如電子銀行的應用,客戶需要將自己的賬號和密碼傳送給銀行,因此銀行的伺服器需要安裝數字證書來表明自己身份的有效性,在某些應用中,伺服器也需要對客戶端的身份進行驗證,這時客戶端也需要安裝數字證書以保證通訊時伺服器可以辨別出客戶端的身份,驗證過程類似於伺服器身份的驗證過程。
三、SSL Socket雙向認證
SSL Socket通訊是對Socket通訊的擴充套件,在Socket通訊的基礎上添加了一層安全性保護,提供了更高的安全性,包括身份驗證、資料加密以及完整性驗證。
SSL Socket雙向認證實現技術:JSSE(Java Security Socket Extension),它實現了SSL和TSL(傳輸層安全)協議在JSSE中包含了資料加密、伺服器加密、訊息完整性和客戶端驗證等技術,通過使用JSSE、可以在客戶機和伺服器之間通過TCP/IP協議安全地傳輸資料,為了實現訊息認證:
伺服器端:
(1)、KeyStore:其中儲存伺服器端的私鑰
(2)、Trust KeyStore:其中儲存客戶端的授權證書
客戶端:
(1)、KeyStore:其中儲存客戶端的私鑰
(2)、Trust KeyStore:其中儲存伺服器端的授權證書。
四、金鑰和授權證書的生成方法
使用java自帶的keytool命令,在命令列生成
(1)、生成伺服器端私鑰kserver.keystore檔案
keytool -genkey -alias serverkey -validity 1 -keystore kserver.keystore
(2)、根據私鑰、匯出伺服器端安全證書
keytool -export -alias serverkey -keystore kserver.keystore -file server.crt
(3)、將伺服器端證書、匯入到客戶端的TrustKeyStore中
keytool -import -alias serverkey -file server.crt -keystore tclient.keystore
(4)、生成客戶端私鑰kclient.keystore檔案
keytool -genkey -alias clientKey -validity 1 -keystore kclient.keystore
(5)、根據私鑰,匯出客戶端安全證書
keytool -export -alias clientkey -keystore kclient.keystore -file client.crt
(6)、將客戶端證書,匯入到伺服器端的TrustKeyStore中
keytool -import -alias clientkey -file client.crt -keystore tserver.keystore
生成的檔案分成兩組,服務端儲存:kserver.keystore tserver.keystore 客戶端儲存:kclient.keystore tclient.keystore
五、通訊過程
客戶端採用kclient.keystore中的私鑰進行資料加密,傳送給服務端,伺服器端採用tserver.keystore中的client.crt證書對資料解密,如果解密成功、證明訊息來自可信的客戶端,進行邏輯處理,伺服器端採用kserver.keystore中的私鑰進行資料加密,傳送給客戶端,客戶端採用tclient.keystore中的server.crt證書對資料解密,如果解密成功,證明訊息來自可信的伺服器端,進行邏輯處理,如果解密失敗,那麼證明訊息來源錯誤,不進行邏輯處理。
SSL Socket雙向認證的安全性:
(1)、可以確保資料傳送到正確的伺服器端和客戶端
(2)、可以防止訊息傳遞過程中被竊取
(3)、防止訊息在傳遞過程中被修改
在系統執行中可能出現以下的情況:
(1)、伺服器端、客戶端都持有正確的金鑰和安全證書,此時伺服器端和客戶端可以進行正常通訊。
(2)、客戶端的金鑰和安全證書不正確、此時伺服器端和客戶端不可以進行正常通訊。
(3)、客戶端未持有金鑰和安全證書,此時伺服器端和客戶端也不可以進行正常通訊。
相關推薦
SSL Socket 雙向認證
一、簡介 SSL協議採用數字證書以及數字簽名進行雙端實體認證,用非對稱加密演算法進行金鑰協商,用對稱加密演算法將資料加密後進行傳輸以保證資料的保密性,並且通過計算數字摘要來驗證資料在傳輸過程中是否被篡改和偽造,從而為敏感資料的傳輸提供了一種安全保障手段。 SSL協議提供的服
SSL/TLS 雙向認證(一) -- SSL/TLS工作原理
一: SSL/TLS介紹 什麼是SSL,什麼是TLS呢?官話說SSL是安全套接層(secure sockets layer),TLS是SSL的繼任者,叫傳輸層安全(transport layer security)。說白點,就是在明文的上層和TCP層之間加上
SSL-TLS 雙向認證(一) -- SSL-TLS工作原理
一: SSL/TLS介紹 什麼是SSL,什麼是TLS呢?官話說SSL是安全套接層(secure sockets layer),TLS是SSL的繼任者,叫傳輸層安全(transport layer security)。說白點,就是在明文的上層和TCP層之間加上一層加密,
SSL/TSL雙向認證過程與Wireshark抓包分析
1、 SSL/TSL基本知識 2、 TLS/SSL雙向認證握手過程分析 (1)client_hello 支援的協議版本,比如TLS 1.0; 支援的加密演算法(Cipher Specs); 客戶端生成的隨機數1(Challenge),稍後用於生成"對話金鑰"。
SSL握手通訊詳解及linux下c/c++ SSL Socket(另附SSL雙向認證客戶端程式碼)
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通訊提供安全及資料完整性的一種安全協議。TLS與SSL在傳輸層對網路連線進行加密。 安全證書既包含了用於加密資料的金鑰
(xampp)lampp 下配置https(ssl)自簽雙向認證以後 apache無法啟動解決方案
art blog xtra 場景 問題 .com 客戶端瀏覽器 php https 自簽CA一般是沒有應用場景的,因為需要客戶端瀏覽器導入證書才能訪問 但是在某些需要內部使用的場景下,確實是一個解決方案 但是在lampp配置了雙向認證以後發現 原來自帶的管理命令 lampp
mosquitto ---SSL/TLS 單向認證+雙向認證
生成證書 # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer
利用mina框架進行ssl雙向認證連結
再上一篇中我已將建立好了證書,現在開始進行測試建立的證書有沒有用,先建立一個maven專案目錄結構如下 我們這裡是進行的雙向測試,如果想進行單項測試,也就是伺服器端不驗證客戶端的身份(關於ssl的原理可以自行百度瞭解)等會再說,改一個配置就行. 先引入pom檔案: <p
PKI學習之路(五)-----------------------SSL雙向認證日誌分析
根據上一篇的執行結果,我們根據它的日誌分析互動的過程 "C:\Program Files\Java\jdk1.8.0_161\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2018.1.5\lib\idea_rt.jar=52038:D:\IntelliJ
PKI學習之路(四)-----------------------SSL雙向認證
專案地址:https://github.com/gongxianshengjiadexiaohuihui/PKI/tree/master/ssl 上一篇 我們講了如何用java自帶的keytool工具生成數字證書,我們需要準備兩個證書,一個是server的一個是client的 &
Android 加密傳輸(SSL),雙向認證 筆記
工作需要使用到 Android 加密傳輸(SSL),雙向認證 ,因為未使用過,所以搜尋了總結了一下相關知識,並整理作為筆記 參考部落格 :Retrofit 2.0 詳解(二)載入https請求(轉) &nbs
Android 加密傳輸(SSL),雙向認證 筆記
工作需要使用到 Android 加密傳輸(SSL),雙向認證 ,因為未使用過,所有搜尋了總結了一下相關知識,並整理作為筆記 搜尋的時候關於SSL+http 的解釋有很多,不做細說,本文值記錄如何實現,包括證書製作、myeclipse服務部署以及Android端程式
C# https雙向認證,"請求被中止: 未能建立 SSL/TLS 安全通道"解決辦法
最近的專案中用到了呼叫https的介面的功能,編寫出程式後在我自己的電腦上執行沒有問題,但是在同事的電腦上和服務上都沒有辦法正常執行,提示“請求被中止: 未能建立 SSL/TLS 安全通道”,最後在專案經理的幫助下和網上查找了大量的資料,以及做了大量的測試下終於解決了問題,所
使用Httpclient實現SSL雙向認證
1、生成伺服器端證書 Java程式碼 keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass pa
SSL/TLS 單雙向認證程式碼示例
採用SSL/TLS形式的安全連結,能防止資料傳輸過程中被截獲修改等問題。 SSL演算法簡短說明: 對稱加密演算法:DES 3DES AES 客戶端和服務端使用同一個金鑰對訊息進行加密解密。 非對稱加密演算法:RSA, 生成公鑰和私鑰,採用公鑰加密,私鑰解密
Android JSSE實現SSL雙向認證(阻塞模式及非阻塞模式)
File pfxFile = new File(mCertPath, "ca.pfx"); try { /*Android支援BKS PKCS12的keystore,不支援JKS,預設為BKS*/ //ksKeys = Ke
雙向認證SSL原理
文中首先解釋了加密解密的一些基礎知識和概念,然後通過一個加密通訊過程的例子說明了加密演算法的作用,以及數字證書的出現所起的作用。接著對數字證書做一個詳細的解釋,並討論一下windows中數字證書的管理,最後演示使用makecert生成數字證書。如果發現文中有錯誤的地方,或者有什麼地方說得不夠清楚,歡迎指出!
nginx配置將http請求轉發支援ssl雙向認證https請求的正向代理
一、引言 nginx 是否支援將http請求轉發為https支援ssl雙向認證,網上沒什麼用例可以參考,查詢各大開發運維社群了下有幾種說法 支援: 不支援: 不清楚家祭不忘告乃翁:
SSL雙向認證(一)
2. 建立CA私鑰 openssl genrsa -out E:/Myca/ca-key.pem 1024 3. 建立證書請求 openssl req -new -out E:/Myca/ca-req.csr -key E:/Myca/ca-key
netty中實現雙向認證的SSL連線
2. 建立SSL通訊的client和server 由於netty 5現在只有alpha版本,因此保險起見使用4.0.24.final版本的netty。 netty的SSLContext提供了newClientContext來為client建立ssl context,但檢視其原始碼未發現能支援雙向認證,即