我有一个Grails 1.3.7应用程序发出HTTPS API调用使用Apache HttpClient的第三方。 我打了第三方URL具有有效的证书。 我创建和执行,像这样我的要求:
HttpClient client = new DefaultHttpClient()
List<BasicNameValuePair> queryParams = new ArrayList<BasicNameValuePair>()
queryParams.add(new BasicNameValuePair("a_parameter", "a_parameter_value"))
URI uri = URIUtils.createURI("https", "third.party.address", 443, "/some/url/for/us", URLEncodedUtils.format(queryParams, "UTF-8"), null)
HttpGet httpGet = new HttpGet(uri)
try {
log.debug "Sending request to ${uri}"
return client.execute(httpGet)
} catch(HttpException e) {
log.error "HttpException during location lookup request: ${e}"
return
} catch(IOException e) {
log.error "IOException during location lookup request: ${e}"
return
}
当我跑步时我在开发模式的项目也能正常工作。 我也可以直接调用从卷曲相同的URL和我的浏览器没有任何错误。 但是,一旦我的项目生成到一个战争文件,并把对已定义了证书/密钥库Tomcat实例,以便客户端可以使用HTTPS连接到美国,我的要求先从以下IOException异常失败:
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
我想在这里找出故障点。
为什么正在从卷曲的HTTPS请求或我的开发模式,不是使从配置Tomcat实例的HTTPS HTTPS请求不同?
Tomcat实例是不能公开访问,但是当我连接到它从我的浏览器(Chrome说,证书是好的,因为做了详细的卷曲要求)有没有证书的问题。
我不是任何延伸的HTTPS / SSL专家,所以我在寻找帮助解释什么是错的,为什么这是错的,我怎么能解决这个问题。 我可以提供任何其他必要的信息。
---更新---我启用了javax.net.debug
如下建议,输出包含以下错误:
java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be\
non-empty
我的谷歌搜索让我觉得这个问题是因为我起tomcat时,使用下面的Java选择:
-Djavax.net.ssl.trustStore=/path/to/tomcat/conf/myStore.jks
如果这是真的,我怎么能加我需要myStore.jks的事情,所以大家都高兴不覆盖默认值?