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

时间:2019-04-11 09:53:03

标签: reverse-proxy gatling client-certificates

我正尝试向隐藏在反向代理后面的应用程序发送http GET / POST请求。与反向代理的通信通过https进行,并且代理需要客户端证书。

似乎密钥库证书(gatling.http.ssl.keyStore.file)未用于向反向代理进行身份验证。我认为这是因为:

  • 如果我在未指定代理的情况下请求https://reverse-proxy-address,则会收到答复(与使用客户端证书在浏览器中访问URL基本上相同)->证书用于请求。
  • 如果我使用http.proxy(Proxy(“ proxy-”-“)”,并向http://hidden-url发送请求,则指定了一个代理,则会收到“ org.asynchttpclient.exception.RemotelyClosedException:远程关闭”(Gatling 2.3.1)或“ java.io.IOException:过早关闭”(Gatling 3.0.3)

我还没有发现如何指定客户端证书用于反向代理身份验证的提示。可能客户端证书已用于通过反向代理进行身份验证,而其他配置未正确配置。我不知道如何进一步分析...

希望其他人已经面临相同的问题,并且知道解决方案。还暗示着我可以更深入地学习!

谢谢

1 个答案:

答案 0 :(得分:0)

我在OSX上使用Gatling 2.x来做到这一点。它还需要几个步骤。在gatling.conf中设置证书路径是不够的。

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

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 {
  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处理自定义证书的正确方法。