SSL接入性能优化 本文主要介绍消息队列 Kafka 通过SSL接入的最佳实践,从而帮助您更好的使用该产品。 文中的最佳实践基于消息队列 Kafka 的 Java 客户端;对于其它语言的客户端,其基本概念与思想是通用的,但实现细节可能有差异,仅供参考。 背景 云消息队列 Kafka 版实例如果选择SASLSSL接入时,可能会出现性能较差的情况。可以通过在客户端指定密码套件的方式,手动选择性能和安全性都较高的套件进行TLS通讯。 SSL握手时客户端发送Hello Client 并带上客户端支持的密码套件,服务端收到握手请求后,获取客户端带来的密码套件和服务端支持的密码套件取交集。密码套件加载顺序受客户端jdk版本影响,不同jdk版本,密码套件顺序不一样,可能会导致性能和安全性等无法保证。因此为了保证性能,SSL连接时客户端可以指定密码套件。 推荐的性能和安全性较高的密码套件 TLSECDHERSAWITHAES256GCMSHA384 TLSECDHERSAWITHAES128GCMSHA256 步骤 1.先按照SASLSSL协议接入Kafka,SASLSSL接入可参考文档 SASLSSL接入点接入 2.在此基础上增加 ssl.cipher.suites 配置 客户端关键参数 java Properties props new Properties(); props.put(ProducerConfig.BOOTSTRAPSERVERSCONFIG, BROKERADDR); props.put(ProducerConfig.VALUESERIALIZERCLASSCONFIG, StringSerializer.class.getName()); props.put(ProducerConfig.KEYSERIALIZERCLASSCONFIG, StringSerializer.class.getName()); props.put(CommonClientConfigs.SECURITYPROTOCOLCONFIG, "SASLSSL"); props.put("sasl.mechanism", "SCRAMSHA512"); props.put(SaslConfigs.SASLJAASCONFIG, "org.apache.kafka.common.security.scram.ScramLoginModule required username"testuser" 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","TLSECDHERSAWITHAES256GCMSHA384,TLSECDHERSAWITHAES128GCMSHA256");//密码套件支持多个,用半角逗号分开