Подтвердить что ты не робот

Использование SSLContext только с сертификатом CA и без хранилища ключей

Мне нужно настроить javax.net.ssl.SSLContext для использования в приложении Jersey-Client. Все, что я хочу сделать, это контекст, чтобы принять пользовательский сертификат root ca. Действительно ли верно, что нет способа создания файла хранилища ключей и импорта сертификата ЦС?

4b9b3361

Ответ 1

Действительно ли это так, что нет способа создания хранилища ключей файл и импортировать сертификат CA?

Есть способ сделать это без файла хранилища ключей, но так как вам придется загрузить сертификат CA, которому вы хотите доверять так или иначе, вам придется каким-то образом загрузить файл или ресурс.

(Возможно, вы также можете реализовать свой собственный TrustManager, который заставляет все вызовы использовать API-интерфейс сертификации, не используя API KeyStore вообще, но это только увеличило бы сложность вашего кода, а не уменьшало бы его Вам также нужно будет понять Руководство программиста Java PKI, чтобы сделать это правильно.)

Если вам действительно не нужен файл хранилища ключей, вы можете использовать API KeyStore в памяти и загрузить сертификат напрямую.

Что-то в этом направлении должно работать (не проверено):

InputStream is = new FileInputStream("cacert.crt");
// You could get a resource as a stream instead.

CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(is);

TrustManagerFactory tmf = TrustManagerFactory
    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null); // You don't need the KeyStore instance to come from a file.
ks.setCertificateEntry("caCert", caCert);

tmf.init(ks);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);

(Не забудьте закрыть все и обработать исключения.)

Возможно ли загрузить сертификат таким образом или загрузить сертификат в похожий экземпляр KeyStore из файла хранилища ключей, более удобно решать вам.