Вы должны создать TrustManager
, который обернет менеджер доверия по умолчанию, перехватит CertificiateExpiredException
и проигнорирует его.
Примечание: как описано в , этоответ , является ли это безопасным или нет, зависит от реализации.В частности, он основан на проверке даты, выполняемой в последний раз, после того, как все остальное было проверено должным образом.
Что-то в этом духе должно работать:
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
// Initialise the TMF as you normally would, for example:
tmf.init((KeyStore)null);
TrustManager[] trustManagers = tmf.getTrustManagers();
final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0];
TrustManager[] wrappedTrustManagers = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return origTrustmanager.getAcceptedIssuers();
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
origTrustmanager.checkClientTrusted(certs, authType);
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
try {
origTrustmanager.checkServerTrusted(certs, authType);
} catch (CertificateExpiredException e) {}
}
}
};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, wrappedTrustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
Менеджеры доверия выдаютCertificateException
s (подробности см. В подклассах), когда что-то не так с сертификатом.Будьте конкретны в том, что вы хотите поймать / игнорировать.Все, что вы действительно хотите проверить, должно быть проверено перед тем, как то, что вы ловите, может быть выброшено, или вам придется проверять это также вручную.Все, что более непринужденно, чем это (в частности, ничего не делать и, следовательно, не генерировать исключений), будет полностью игнорировать проверку и подтверждение сертификата, что примерно равнозначно использованию анонимных наборов шифров или игнорированию аутентификации.Это отрицательно сказалось бы на целях безопасности использования SSL / TLS (в отличие от того, чтобы быть более гибким в отношении срока действия).