SSL是一種安全協議,允許Web瀏覽器和其它TCP客戶端基於各種級別的機密性和認證HTTP和其它TCP服務器對話。
保護通信
- JSSE掩蓋了如何協商算法、交換密鑰、認證通信雙方和加密數據的底層細節。
創建安全客戶端Socket
SocketFactory factory = SSLSocketFactory.getDefault();
Socket socket = factory.createSocket("login.ibiblio.org", 7000);
- 生成和交換密鑰時,都有相當可觀的CPU和網絡開銷。不要所有內容都通過HTTPS提供,只有確實需要保密且不太關心延遲的內容纔會通過HTTPS傳輸。
選擇密碼組
SSLSocketFactory.getSupportedCipherSuites()
:可以指出給定Socket上可用的算法組合。SSLSocketFactory.getEnabledCipherSuites()
:指出Socket允許使用哪些密碼組。SSLSocketFactory.setEnabledCipherSuites(String[] suites)
:修改客戶端使用的密碼組。- TSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256對於所有已知攻擊都相當安全。
- 如果連接另一端不支持使用的加密協議,試圖讀取Socket或寫入Socket時會拋出異常。
事件處理器
public interface HandshakeCompletedListener extends java.util.EventListener
public void handshakeCompleted(HandshakeCompletedEvent event)
會話管理
- 相同會話中的不同Socket使用一組相同的公開密鑰和私有密鑰。
- 會話由SSLSession接口的實例表示。
客戶端模式
創建安全服務器Socket
- 創建一個安全服務器Socket:
- 使用keytool生成公開密鑰和證書。
- 花錢請可信任的第三方認證你的證書。
- 爲你使用的算法創建一個SSLContext。
- 爲你要使用的證書源創建一個TrustManagerFactory。
- 爲你要使用的密鑰類型創建一個KeyManagerFactory。
- 爲密鑰和證書數據庫創建一個KeyStore對象。
- 用密鑰和證書填充KeyStore對象。
- 用KeyStore及其口令短語初始化KeyManagerFactory。
- 用KeyManagerFactory中的密鑰管理器、TrustManagerFactory中的信任管理器和一個隨機源來初始化上下文。