SSL/TLS 支援

支援安全套接字層/傳輸層安全。當使用 NIO 時,JDK 5+ SSLEngine 功能用於在建立連線後處理握手。當不使用 NIO 時,則使用標準的 SSLSocketFactorySSLServerSocketFactory 物件來建立連線。提供了許多策略介面以允許進行大量自定義。這些介面的預設實現提供了開始安全通訊的最簡單方法。

入門

無論您是否使用 NIO,都需要在連線工廠上配置 ssl-context-support 屬性。此屬性引用一個 <bean/> 定義,該定義描述了所需金鑰庫的位置和密碼。

SSL/TLS 對等點每個需要兩個金鑰庫

  • 一個包含私鑰和公鑰對以識別對等點的金鑰庫

  • 一個包含受信任對等點的公鑰的信任庫。請參閱 JDK 提供的 keytool 工具的文件。基本步驟是

    1. 生成一個新的金鑰對並將其儲存在金鑰庫中。

    2. 匯出公鑰。

    3. 將公鑰匯入到對等點的信任庫中。

    4. 為另一個對等點重複此操作。

在測試用例中,兩個對等點使用相同的金鑰庫是很常見的,但在生產環境中應避免這樣做。

建立金鑰庫後,下一步是向 TcpSSLContextSupport bean 指示它們的位置,並向連線工廠提供對該 bean 的引用。

以下示例配置 SSL 連線

<bean id="sslContextSupport"
    class="o.sf.integration.ip.tcp.connection.support.DefaultTcpSSLContextSupport">
    <constructor-arg value="client.ks"/>
    <constructor-arg value="client.truststore.ks"/>
    <constructor-arg value="secret"/>
    <constructor-arg value="secret"/>
</bean>

<ip:tcp-connection-factory id="clientFactory"
    type="client"
    host="localhost"
    port="1234"
    ssl-context-support="sslContextSupport" />

DefaultTcpSSLContextSupport 類還有一個可選的 protocol 屬性,可以是 SSLTLS(預設)。

金鑰庫檔名(前兩個建構函式引數)使用 Spring Resource 抽象。預設情況下,檔案位於類路徑上,但您可以透過使用 file: 字首(改為在檔案系統上查詢檔案)來覆蓋此設定。

從版本 4.3.6 開始,當您使用 NIO 時,可以在連線工廠上指定 ssl-handshake-timeout(以秒為單位)。此超時(預設值為 30 秒)在 SSL 握手期間等待資料時使用。如果超時,則停止程序並關閉套接字。

主機驗證

從版本 5.0.8 開始,您可以配置是否啟用主機驗證。從版本 5.1 開始,它預設啟用;停用它的機制取決於您是否使用 NIO。

主機驗證用於確保您連線到的伺服器與證書中的資訊匹配,即使證書是受信任的。

當使用 NIO 時,例如,配置 DefaultTcpNioSSLConnectionSupport

@Bean
public DefaultTcpNioSSLConnectionSupport connectionSupport() {
    DefaultTcpSSLContextSupport sslContextSupport = new DefaultTcpSSLContextSupport("test.ks",
            "test.truststore.ks", "secret", "secret");
    sslContextSupport.setProtocol("SSL");
    DefaultTcpNioSSLConnectionSupport tcpNioConnectionSupport =
            new DefaultTcpNioSSLConnectionSupport(sslContextSupport, false);
    return tcpNioConnectionSupport;
}

第二個建構函式引數停用主機驗證。然後將 connectionSupport bean 注入到 NIO 連線工廠中。

當不使用 NIO 時,配置在 TcpSocketSupport

connectionFactory.setTcpSocketSupport(new DefaultTcpSocketSupport(false));

同樣,建構函式引數停用主機驗證。

© . This site is unofficial and not affiliated with VMware.