如何跳过主机备用名称验证

问题描述 投票:0回答:1

我有以下示例空手道脚本

* url 'https://abcd-xxxx.xx.xxx.xxx.xxx/apipath'
* header Content-Type = 'application/json'
* header Accept = 'application/json'
* configure ssl = false

场景:

黄瓜测试步骤

使用上面的测试脚本,我遇到以下错误。

javax.net.ssl.SSLPeerUnverifiedException:org.apache.http.conn.ssl.DefaultHostnameVerifier - 的证书与任何主题备用名称不匹配:[备用名称列表] 在 org.apache.http.conn.ssl.DefaultHostnameVerifier.matchDNSName(DefaultHostnameVerifier.java:177) 在 org.apache.http.conn.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:122) 在 org.apache.http.conn.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:99) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:503) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:437) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:384) 在org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) 在org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) 在 org.apache.http.impl.execchain.MainClientExec.builtRoute(MainClientExec.java:393) 在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) 在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) 在 org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) 在 org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) 在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) 在 com.intuit.karate.http.apache.ApacheHttpClient.makeHttpRequest(ApacheHttpClient.java:313) 在 com.intuit.karate.http.apache.ApacheHttpClient.makeHttpRequest(ApacheHttpClient.java:89) 在 com.intuit.karate.http.HttpClient.invoke(HttpClient.java:237) 在 com.intuit.karate.core.ScenarioContext.clientInvoke(ScenarioContext.java:758) 在 com.intuit.karate.core.ScenarioContext.method(ScenarioContext.java:811) 在 com.intuit.karate.StepActions.method(StepActions.java:251) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intuit.karate.core.Engine.executeStep(Engine.java:150)

我已将 https://abcd-xxxx.xx.xxx.xxx.xxx 证书添加到 java 密钥库中。但我面临上述问题。众所周知,主机名不存在于我在上述主机 URL 的信任存储中添加的证书主题备用名称部分中。截至目前,我认为我无法在现有证书中添加预期的替代方案。因此,只需检查是否有任何方法可以跳过空手道中的 DefaultHostname 验证,我就可以运行测试。

我也尝试过同样的失眠,效果很好。当 SSL = true 时,出现 503 服务不可用错误,但是该服务正在运行,因为我仍然可以通过 insomnia 工具进行测试。

karate
1个回答
0
投票

如果

configure ssl = true
不起作用,我会努力解决这个问题。否则,您可能需要添加证书:https://stackoverflow.com/search?q=%5Bkarate%5D+ssl+certificate

也许这就是空手道的一个空白,如果你能提供一种万无一失的方法来复制,甚至更好地调查并提交 PR,那就太好了。如果您了解一点 Java,那么为 Karate 做贡献是很容易的。

© www.soinside.com 2019 - 2024. All rights reserved.