Java 基于SSL的Apache oltu oauth2 ask令牌

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/

有没有一种方法可以使用ApacheOLTU通过SSL请求访问令牌? 如果我不使用https(端口8443),而只使用http,它会非常好用

我的守则如下:

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)
。这就是为什么我认为它不起作用的原因…好吧,所以你使用一个自签名/不受信任的证书以及一个与主机名不匹配的证书;然后,您不仅需要覆盖主机名验证,还需要覆盖信任管理器,如中所述