SSL接入性能優化
更新時間 2025-07-14 11:58:47
最近更新時間: 2025-07-14 11:58:47
分享文章
本文主要介紹消息隊列 Kafka 通過SSL接入的最佳實踐,從而幫助您更好的使用該產品。
文中的最佳實踐基于消息隊列 Kafka 的 Java 客戶端;對于其它語言的客戶端,其基本概念與思想是通用的,但實現細節可能有差異,僅供參考。
背景
云消息隊列 Kafka 版實例如果選擇SASL_SSL接入時,可能會出現性能較差的情況。可以通過在客戶端指定密碼套件的方式,手動選擇性能和安全性都較高的套件進行TLS通訊。
SSL握手時客戶端發送Hello Client 并帶上客戶端支持的密碼套件,服務端收到握手請求后,獲取客戶端帶來的密碼套件和服務端支持的密碼套件取交集。密碼套件加載順序受客戶端jdk版本影響,不同jdk版本,密碼套件順序不一樣,可能會導致性能和安全性等無法保證。因此為了保證性能,SSL連接時客戶端可以指定密碼套件。
推薦的性能和安全性較高的密碼套件
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
步驟
1.先按照SASL_SSL協議接入Kafka,SASL_SSL接入可參考文檔 SASL_SSL接入點接入
2.在此基礎上增加 ssl.cipher.suites 配置
客戶端關鍵參數
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BROKER_ADDR);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
props.put("sasl.mechanism", "SCRAM-SHA-512");
props.put(SaslConfigs.SASL_JAAS_CONFIG, "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"test_user\" password=\"f6eca4dbc78df78d63fba980e448185f\";");//注:上面的密碼f6eca4dbc78df78d63fba980e448185f,為用戶管理里面創建用戶時填入的密碼進行md5的結果,md5取32位小寫
props.put("ssl.truststore.location","/kafka/client.truststore.jks");
props.put("ssl.truststore.password","sJses2tin1@23");
props.put("ssl.endpoint.identification.algorithm","");
props.put("ssl.cipher.suites","TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");//密碼套件支持多個,用半角逗號分開