Есть ли способ запросить токен доступа через SSL с помощью Apache oltu? Он отлично работает, если я не использую HTTPS (порт 8443), но только с помощью HTTP ...Apache oltu oauth2 запросить токен через SSL
код у меня есть:
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)
Я знаю, что существует такой способ исправить это, заменив HostnameVerifier HttpsURLConnection, но есть ли способ достичь этого в 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;
}
});
}
При установке DefaultHostnameVerifier у меня появилось следующее исключение: 'org.apache.oltu.oauth2.common.exception.OAuthSystemException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun .security.provider.certpath.SunCertPathBuilderException: невозможно найти допустимый путь сертификации для запрошенной цели \t at org.apache.oltu.oauth2.client.URLConnectionClient.execute (URLConnectionClient.java:108) '. Вот почему я думал, что это не работает ... –
ОК, поэтому вы используете самоподписанный/ненадежный сертификат, а также тот, который не соответствует имени хоста; то вам нужно не только переопределить проверку имени хоста, но и доверительный менеджер, как описано в http://stackoverflow.com/questions/11857417/x509trustmanager-override-without-allowing-all-certs –
Это решило мою проблему. Большое спасибо! –