我对Groovy& amp; SoapUING。我希望有人能帮助我找出并解决这个错误。谢谢!
我尝试做的事情:遍历表格中的每个数据库行项目并将其作为输入用于发出HTTPBuilder
请求(GET或POST)路径中的查询(添加baseURL/path/hello
)或通过参数(添加baseURL/path?searchNode="hello"
)。 baseURL类似于https://search-test-env.ser.com
。
我遇到问题的地方当我尝试通过HTTPBuilder
发布请求时。
错误: PKIX Path Building Failed
其他相关信息:
ojdbc6, ojdbc6_g, signpost-commonshttp4-1.2.1.1, ezmorph-1.0.6, json-lib-2.3-jdk15, xml-resolver-1.2, signpost-core-1.2.1.1, appengine-api-1.0-sdk-1.3.8, nekohtml-1.9.16, http-builder-0.7, http-builder-0.7-sources, http-builder-0.7-javadoc
。代码:
def qryPrmRqstHTTPBldr( pBaseUrl, pPath, pQuery, pMethod ) {
def ret = null
def http = new HTTPBuilder()
def meth
if ( pMethod == 'GET') {
meth = Method.GET
}
else if ( pMethod == 'POST') {
meth = Method.POST
}
// perform a GET/POST request, expecting TEXT response
http.request(pBaseUrl, meth, ContentType.TEXT) { req ->
uri.path = pPath
uri.query = pQuery
/*
headers.'User-Agent' = 'Apache-HttpClient/4.5.1 (Java/1.8.0_66)'
headers.'Host' = 'xxx-xx-xxx.xxx.xxx'
headers.'Accept-Encoding' = 'gzip,deflate'
headers.'Connection' = 'Keep-Alive'
*/
log.info System.getProperty("java.runtime.version")
log.info System.getProperty("javax.net.ssl.trustStore")
log.info System.getProperty("javax.net.ssl.keyStore")
log.info System.getProperty("java.home")
log.info System.getProperty("java.class.path")
// response handler for a success response code
response.success = { resp, reader ->
println "response status: ${resp.statusLine}"
println 'Headers: -----------'
ret = reader.getText()
println 'Response data: -----'
println ret
println '--------------------'
}
}
return ret
}
运行此代码会引发PKIX Path Building Failed
错误(没有可用的堆栈跟踪)和每个属性的内容:
System.getProperty("java.runtime.version") // 1.8.0_66-b17
System.getProperty("javax.net.ssl.trustStore") // null
System.getProperty("javax.net.ssl.keyStore") // null
System.getProperty("java.home") // c:\program files\smartbear\readyapi-1.6.0\jre
System.getProperty("java.class.path") // C:\Program Files\SmartBear\ReadyAPI-1.6.0\.install4j\i4jruntime.jar;......
答案 0 :(得分:0)
PKIX path building failed
错误。这基本上意味着在您的信任存储中,没有颁发最终实体证书的证书颁发机构或服务器证书的中间证书;并且需要建立证书链。
在您的案例中javax.net.ssl.trustStore
未定义,因System.getProperty("javax.net.ssl.trustStore")
为null
;所以来自JSSE
如果定义了系统属性:
javax.net.ssl.trustStore
,那么TrustManagerFactory
尝试使用文件名查找文件 由该系统属性指定,并使用该文件 密钥库。如果javax.net.ssl.trustStorePassword
系统属性是 也定义了,它的值用于检查数据的完整性 在打开它之前的信任库。如果是javax.net.ssl.trustStore
已定义但指定的文件不存在,则为默认值 创建使用空密钥库的TrustManager。如果未指定
javax.net.ssl.trustStore
系统属性, 那么如果文件<java-home>/lib/security/jssecacerts
存在,那就是 文件被使用。 (请参阅安装目录 有关所涉及内容的信息。)- 醇>
否则,如果是文件 存在
<java-home>/lib/security/cacerts
,使用该文件。
然后要解决此问题,您需要将所需的证书添加到JRE_HOME/lib/security/jssecacerts
(如果存在),或者JRE_HOME/lib/security/cacerts
如果不是 Java ,则用于运行< em> Groovy 脚本。
正确的方法:在信任库中添加服务器证书的证书颁发机构。然后确保您的服务器正确地为CA:中间证书(如果需要)提供所有证书链,直到最终实体服务器证书。
蛮力方式:如果您在设置信任存储区时遇到一些问题,或者您不确定服务器是否正在推送链证书......只需直接放入信任库中的服务器证书。这不是&#34;纯粹主义者&#34;方式,但因为你只是测试这将有效。
下载CA服务器证书并使用keytool
并使用以下命令将其加载到信任存储区(cacerts
的默认密码为changeit
):
keytool -import -alias <someAlias> -file <certificatePath> -keystore <trustStorePath>
Here我的答案之一是关于如何加载证书的更多细节。