【问题标题】:Java.Jmeter. SSL unexpected server Message "server_hello"Java.Jmeter。 SSL 意外服务器消息“server_hello”
【发布时间】:2022-05-12 00:20:01
【问题描述】:

我尝试使用带有插件“DI-fakfa Meter”的 Jmeter 来使用 SSL 加载我的 kafka。

我从 VAULT 系统获得了以下证书: -CA -签发 CA - 私钥 PEM 格式。

对于 Jmeter,我使用 keytool 导入它: 1.merged files发行CA和私钥,导入 JKS 格式的 keytool 下一条命令:"keytool -import -trustcacerts -alias root -file "name_file" -keystore privatekey.jks"

  1. 在 Jmeter 中添加 privatekey.jks 作为密钥库
  2. 在 Jks 中导入文件 CA.pem 并将其添加到 Jmeter 中的信任库中。

使用 -Djavax.net.debug = SSL,handshake 启动 Jmeter。

在控制台中我收到错误: “致命(UNEXPECTED_MESSAGE):意外的握手消息:服务器你好”。

在 python 代码中,此证书以 pem 格式正常工作。

【问题讨论】:

    标签: java ssl apache-kafka jmeter


    【解决方案1】:

    鉴于您能够在 Python 代码中成功运行请求,您应该能够在 JMeter 中执行此操作,启用 Python 和 JMeter 的 SSL handshake 跟踪并比较数据包,尤其是证书链 - 他们需要是一样的。

    我也不知道“DI-fakfa Meter”是什么,我记得使用Pepper-Box - Kafka Load Generator 对系统进行负载测试,其中启用 SSL 的 Kafka 被用作微服务之间的传输链,没有任何问题。

    相关设置如下:

    更多信息:

    【讨论】:

    • 是吗?我也试过peper-box,但有同样的错误
    • 您的 peper-box 在上一个 Jmeter 版本上工作了吗?我在上一个 Jmete 版本的这个插件中没有 ssl 属性
    • 或许你能告诉我你是如何导入 pem 证书的?
    【解决方案2】:

    您需要 libs kafka-clients 2.8.1、bouncycastle 和 java。

    类似这样的:

    import java.security.Security;
    import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
    
    String private_key = "certs as string" //pem format
    String certificate = "certs as string" //pem format
    String issuing_ca = "certs as string" //pem format
    String common = "mla-bla"
    String kafka_topic = "LOAD.TESTING" //topic
    
    Properties props = new Properties();
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    
    props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL");
    props.put(SslConfigs.SSL_KEYSTORE_KEY_CONFIG, private_key);
    props.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "PEM");
    props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PEM");
    props.put(SslConfigs.SSL_KEYSTORE_CERTIFICATE_CHAIN_CONFIG, certificate);
    props.put(SslConfigs.SSL_TRUSTSTORE_CERTIFICATES_CONFIG, issuing_ca);
    
    props.put(ProducerConfig.CLIENT_ID_CONFIG, common);
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-supapupa-1:9093");
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    
    Producer<String, String> producer = new KafkaProducer<String, String>(props);
    
    ProducerRecord<String, String> record = new ProducerRecord<String, String>("${kafka_topic}", "${kkey}", "load_test_jmeter-" + "${rand}");
    
    try{
        producer.send(record);
        producer.flush();
        producer.close()
    }catch (Exception e){
        e.printStackTrace();
         log.info("Exception =" + e);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2011-10-12
      • 2013-01-09
      • 1970-01-01
      • 2019-04-15
      • 2017-04-30
      相关资源
      最近更新 更多