首先,我使用'DefaultResourceRetriever',沒有任何這樣的配置:
new DefaultResourceRetriever(1000, 1000);
然后我得到了以下例外
java.security.cert.CertificateException: No subject alternative DNS name matching my-jwks-url.com found.
為了通過證書檢查,我已經配置了資源檢索器,如下所示;
TrustStrategy trustStrategy = (X509Certificate[] x509Certificates, String s) -> true;
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, trustStrategy)
.build();
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
return new DefaultResourceRetriever(1000, 1000, 0, true, socketFactory);
但這并沒有改變任何東西。
我可以像這樣將主機名驗證器設定為SSLConnectionSocketFactory:
new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier())但是 nimbus ResourceRetriever 只接受SSLSocketFactory作為引數。
有什么方法可以禁用主機名驗證?
uj5u.com熱心網友回復:
我通過擴展DefaultResourceRetriever和覆寫openConnection(URL url)方法來解決它。
如果 URL 是 HTTPS,它會創建HttpsURLConnection。我們可以將 NoopH??ostnameVerifier 設定為它。
這是我的解決方案:
public class NoopHostnameVerifyingResourceRetriever extends DefaultResourceRetriever {
public NoopHostnameVerifyingResourceRetriever(int connectTimeout, int readTimeout) {
super(connectTimeout, readTimeout);
}
@Override
protected HttpURLConnection openConnection(URL url) throws IOException {
HttpURLConnection connection = super.openConnection(url);
if (connection instanceof HttpsURLConnection) {
((HttpsURLConnection) connection).setHostnameVerifier(new NoopHostnameVerifier());
}
return connection;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482787.html
上一篇:外部服務的Istio直通不起作用
