我无法让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 fails to record HTTPS traffic
答案 0 :(得分:0)
总之,答案是HTTPBuilder不尊重Betamax实现的自动重定向代理。这是在betamax.software文档中记录的,我似乎误解了它。要使用HTTPBuilder(或它的RESTClient衍生产品),只需将httpclient上的代理主机/端口分别手动设置为127.0.0.1/5555。当使用尊重JVM代理设置的HTTP客户端时,它似乎无缝地工作。
还值得注意的是,错误消息非常具有误导性。使用RESTClient时,它似乎指向证书中的一个问题,这使我花了一天时间试图弄清楚为什么它没有在证书库中看到betamax证书。但是,证书没有问题,它纯粹是通过手动设置代理来修复的。