Java 基于SSL的Apache oltu oauth2 ask令牌
有没有一种方法可以使用ApacheOLTU通过SSL请求访问令牌? 如果我不使用https(端口8443),而只使用http,它会非常好用 我的守则如下:Java 基于SSL的Apache oltu oauth2 ask令牌,java,ssl,spring-security,oauth-2.0,oltu,Java,Ssl,Spring Security,Oauth 2.0,Oltu,有没有一种方法可以使用ApacheOLTU通过SSL请求访问令牌? 如果我不使用https(端口8443),而只使用http,它会非常好用 我的守则如下: OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); OAuthClientRequest request = OAuthClientRequest.tokenLocation(MessageFormat.format("https://{0}:8443/
OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
OAuthClientRequest request = OAuthClientRequest.tokenLocation(MessageFormat.format("https://{0}:8443/applicationId/oauth/token", host)) //
.setGrantType(GrantType.PASSWORD) //
.setUsername("username") //
.setPassword("password") //
.setClientId("clientId") //
.buildBodyMessage();
OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request);
我收到以下异常消息:
org.apache.oltu.oauth2.common.exception.OAuthSystemException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found
at org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:108)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71)
我知道有一种方法可以通过覆盖HttpsURLConnection的HostnameVerifier来解决这个问题,但是有没有一种方法可以在apache oltu中实现这一点呢
static {
//for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("localhost")) {
return true;
}
return false;
}
});
}
URLConnectionClient
使用HttpsURLConnection
,因此您的代码应该可以工作;您尝试过吗?在设置DefaultHostnameVerifier时,我收到以下异常:org.apache.oltu.oauth2.common.exception.OAuthSystemException:javax.net.ssl.SSLHandshakeException:sun.security.validator.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在上找到请求目标的有效认证路径org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:108)
。这就是为什么我认为它不起作用的原因…好吧,所以你使用一个自签名/不受信任的证书以及一个与主机名不匹配的证书;然后,您不仅需要覆盖主机名验证,还需要覆盖信任管理器,如中所述