Доверять сертификату с истекшим сроком действия

У моего клиента возникает ошибка, указанная ниже, при обмене данными с https-сервером с истекшим сертификатом. Пока мы ждем, что она будет исправлена ​​на стороне сервера путем обновления, мне интересно, можем ли мы передать эту ошибку, добавив просроченный сертификат в наше собственное хранилище доверенных сертификатов? Это позволяет нам сэкономить время на тестирование, ожидая обновления сертификата.

US has an end date Thu Sep 08 19:59:59 EDT 2011 which is no longer valid.
[4/17/13 19:22:55:618 EDT] 00000021 SystemOut     O   WebContainer : 0, SEND TLSv1 ALERT:  fatal, description = certificate_unknown
[4/17/13 19:22:55:620 EDT] 00000021 SystemOut     O   WebContainer : 0, WRITE: TLSv1 Alert, length = 2
[4/17/13 19:22:55:620 EDT] 00000021 SystemOut     O   WebContainer : 0, called closeSocket()
[4/17/13 19:22:55:620 EDT] 00000021 SystemOut     O   WebContainer : 0, handling exception: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.g: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is: 
    java.security.cert.CertPathValidatorException: The certificate issued by CN=Thawte SSL CA, O="Thawte, Inc.", C=US is not trusted; internal cause is: 

person Aravind Yarram    schedule 17.04.2013    source источник
comment
Возможно, вас заинтересует это.   -  person Bruno    schedule 18.04.2013


Ответы (1)


Используйте следующий код, чтобы доверять всем сертификатам. Примечание. Не используйте его в производстве

    try {
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(new KeyManager[0], new TrustManager[] { new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String name) throws CertificateException {}

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String name) throws CertificateException {}

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        } }, new SecureRandom());

        SSLContext.setDefault(ctx);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
person Michael    schedule 18.04.2013
comment
Спасибо. Но нам не нужно делать это программно. Просто добавление в траст-менеджер работает. - person Aravind Yarram; 18.04.2013