Переопределение X509TrustManager без разрешения всех сертификатов?

в настоящее время я переопределяю X509TrustManager, чтобы разрешить все сертификаты как временное "решение" (небезопасное при этом). Я пытаюсь понять, как я буду добавлять, чтобы он принимал только конкретный сертификат, с которым у меня возникают проблемы, пока не будет сделано правильное исправление (что на данный момент не в моих руках). Вот текущий код.

TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
    }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
    }
}};

try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
    System.out.println(e.getStackTrace());
}

2 ответов


все, что вам нужно сделать, это вернуть сертификат от getAcceptedIssuers. См.этой

 InputStream inStream = new FileInputStream("fileName-of-cert");
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
 inStream.close();

а затем верните это в массив внутри метода


одной из возможностей было бы временно добавить проблемный сертификат в хранилище ключей JVM в качестве доверенного сертификата.