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");//密码套件支持多个,用半角逗号分开