0

我无法让 HTTPS URL 与 betamax 一起使用。

它类似于下面发布的其他问题,但是我已经完成了 betamax.pem 文件导入,它似乎没有任何效果:

这是我运行的导入命令:

c:\Users\UserAccount>"%JAVA_HOME%/bin/keytool.exe" -importcert -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file betamax.pem -alias betamax -storepass changeit -noprompt

这是我的配置:

    static final File TAPES =
    new File(System.getProperty('BETAMAX_TAPEDIR') ?:
        'src/integrationTest/resources/betamax/tapes')

    static final TapeMode TAPEMODE =
    System.getProperty('BETAMAX_MAKETAPES') ?
        TapeMode.READ_WRITE :
        TapeMode.READ_ONLY

    static final Integer PROXYPORT =
    System.getProperty('BETAMAX_PROXYPORT') ?
        System.getProperty('BETAMAX_PROXYPORT').toInteger() :
        Configuration.DEFAULT_PROXY_PORT

    @Shared
    Configuration configuration =  Configuration.builder()
            .tapeRoot(TAPES)
            .ignoreLocalhost(false)
            .defaultMode(TAPEMODE)
            .proxyPort(PROXYPORT)
            .sslEnabled(true)
            .build()

    @Rule
    RecorderRule recorder = new RecorderRule(configuration)

    @Betamax(tape='GradleNews.tape')
    def "Try record HTTPS"()
    {
      when:
      def http = new RESTClient('https://discuss.gradle.org')
      http.head path: 'c/books-articles'

      then:
      true
    }

产生:

javax.net.ssl.SSLException: hostname in certificate didn't match: <discuss.gradle.org> != <*.discourse.org> OR <*.discourse.org> OR <discourse.org>

谁能看到我做错了什么?

以下是类似问题的报告: Betamax 无法记录 HTTPS 流量

4

1 回答 1

0

总之,这个问题的答案是 HTTPBuilder 不尊重 Betamax 实现的自动重定向到代理。这记录在 betamax.software 文档中,我似乎误解了。要使用 HTTPBuilder(或它的 RESTClient 衍生产品),只需将 httpclient 上的代理主机/端口分别手动设置为 127.0.0.1/5555。当使用尊重 JVM 代理设置的 HTTP 客户端时,它似乎可以无缝工作。

还值得注意的是,错误消息非常具有误导性。使用 RESTClient 时,它似乎指向证书中的一个问题,这让我花了一天时间试图弄清楚为什么它没有在证书存储中看到 betamax 证书。但是,证书没有问题,纯粹是通过手动设置代理来解决的。

于 2016-09-06T20:58:34.350 回答