【问题标题】:Disable JMeter SSL certificate parsing & validation禁用 JMeter SSL 证书解析和验证
【发布时间】:2021-11-05 16:56:17
【问题描述】:

我正在尝试在具有自签名证书的服务器上查询 HTTPS REST API。

我设置了一个 HTTP 请求并将其指向我的 API。但是当我运行它时,我得到一个错误:

javax.net.ssl.SSLHandshakeException: Failed to parse server certificates
    at sun.security.ssl.Alert.createSSLException(Unknown Source)
    at sun.security.ssl.TransportContext.fatal(Unknown Source)
    at sun.security.ssl.TransportContext.fatal(Unknown Source)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(Unknown Source)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(Unknown Source)
    at sun.security.ssl.SSLHandshake.consume(Unknown Source)
    at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)
    at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)
    at sun.security.ssl.TransportContext.dispatch(Unknown Source)
    at sun.security.ssl.SSLTransport.decode(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:436)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:384)
    at org.apache.jmeter.protocol.http.sampler.hc.LazyLayeredConnectionSocketFactory.connectSocket(LazyLayeredConnectionSocketFactory.java:91)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:404)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:935)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:646)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:66)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1296)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1285)
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:638)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.security.cert.CertificateParsingException: Empty issuer DN not allowed in X509Certificates
    at sun.security.x509.X509CertInfo.parse(Unknown Source)
    at sun.security.x509.X509CertInfo.<init>(Unknown Source)
    at sun.security.x509.X509CertImpl.parse(Unknown Source)
    at sun.security.x509.X509CertImpl.<init>(Unknown Source)
    at sun.security.provider.X509Factory.engineGenerateCertificate(Unknown Source)
    at java.security.cert.CertificateFactory.generateCertificate(Unknown Source)
    ... 34 more

如何禁用 SSL 证书解析和验证?

This questionthis question 都说 JMeter 不验证 SSL 证书。如果这是真的,那么显然我的服务器的 X509 证书无效这一事实就不是问题了。这些问题已经很老了,所以可能不再是默认情况下不再验证的情况

我尝试将此属性添加到我的 jmeter.properties 文件中,但没有任何区别:server.rmi.ssl.disable=true。这是在上述类似问题之一中提出的,(尽管我不确定为什么在 RMI 中禁用 SSL 与 HTTP 有任何关系。)

如何让 JMeter 完全忽略我的 https API 请求的无效自签名证书?

最新的 JMeter (5.4.1) 和 Java 8u311。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    根据specification

    发行人字段标识已签署并发行 证书。 issuer 字段必须包含一个非空的区分 名称(DN)

    in RFC terms 必须真的是MUST

    必须这个词,或“需要”或“应”等术语,表示 定义是规范的绝对要求。

    实际的 JMeter 文档states:

    JMeter HTTP 采样器被配置为接受所有证书,无论是否受信任,无论有效期等。这是为了在测试服务器时提供最大的灵活性。

    所以我建议联系开发人员或系统管理员并要求他们修复证书

    如果由于某种原因无法使用,您可以尝试在 HTTP Request 采样器中使用 HTTP 协议而不是 HTTPS(或者更好的 HTTP Request Defaults

    如果您的应用程序不公开 HTTP 端点,您唯一能做的就是修补您的 Java 运行时并recompile 它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2016-07-27
      • 2011-05-03
      相关资源
      最近更新 更多