通过要求客户端证书的反向代理发送HTTP GET/POST请求

4
我正在尝试向隐藏在反向代理后面的应用程序发送http GET / POST请求。与反向代理的通信是通过https进行的,代理需要客户端证书。
看起来密钥库证书(gatling.http.ssl.keyStore.file)未用于与反向代理进行身份验证。我这样假设,因为:
- 如果我请求https://reverse-proxy-address而没有指定代理,我会收到一个答案(基本上与使用客户端证书在浏览器中访问URL时相同) ->证书用于请求。 - 如果我使用http.proxy(Proxy(“reverse-proxy-address”,port))指定代理并发送请求http://hidden-url,我会收到“org.asynchttpclient.exception.RemotelyClosedException:Remotely closed”(Gatling 2.3.1)或“java.io.IOException:Premature close”(Gatling 3.0.3)。
我还没有找到任何提示,可以指定客户端证书用于反向代理的身份验证。也许客户端证书已经用于与反向代理进行身份验证,但可能有其他配置不正确。我不知道如何进一步分析...希望有人已经遇到过相同的问题并知道解决方法。同时,欢迎提供更深入挖掘的提示!谢谢
1个回答

0

我在OSX上使用Gatling 2.x进行了这个操作。它需要更多的步骤。在gatling.conf中设置证书路径并不足够。

我收到了CRT.pem和KEY.pem文件。我基于密钥对创建了p12证书。

openssl pkcs12 -export -in client1-crt.pem -inkey client1-key.pem -out cert.p12

然后我创建了一个存储并将证书导入到密钥库中。

keytool -importkeystore -deststorepass mycert -destkeystore filename-new-keystore.jks -srckeystore cert.p12 -srcstoretype PKCS12

下一步是在gatling.conf中设置正确的路径(这取决于操作系统)。
我的Gatling配置文件:
gatling {
  http {
    ssl {
      keyStore {
        type = "PKCS12"
        file = "/Users/lukasz/cert.p12"
        password = ""
      }
      trustStore {
        type = ""
        file = "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/security/cacerts"
        password = "changeit"
      }
    }
  }
}

通过这种方法,我可以在Gatling中使用自定义证书。我不确定这是否是JVM处理自定义证书的权宜之计还是正式的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接