проверка подлинности на стороне сервера с помощью ssl: отправка файла сертификата с клиента - PullRequest
2 голосов
/ 14 марта 2012

Я успешно установил SSL-аутентификацию с сертификатами: настроил Apache http-клиент, настроил сервер (weblogic, CLIENT-CERT login-config, если это имеет значение), проверил, что он работает.

однако в коде клиента я должен жестко указать путь к хранилищу доверия (либо вручную инициализировать TrustManagerFactory, либо через соответствующие свойства JVM) и его пароль, и я не чувствую, что это правильно. Кроме того, сертификаты должны быть вручную зарегистрированы на стороне клиента с помощью keytool, что также не так гибко.

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

UPDATE

как предложено здесь , я попытался прочитать файл сертификата в новое хранилище ключей без пароля и инициализировать KeyManagerFactory и TrustManagerFactory с этим хранилищем ключей:

CertificateFactory cf = CertificateFactory.getInstance("X509");
Certificate cer = cf.generateCertificate(new FileInputStream("myFile.cer"));

KeyStore defaultKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
defaultKeyStore.load(null, "".toCharArray());
defaultKeyStore.setCertificateEntry("alias", cer);

trustManagerFactory.init(defaultKeyStore);
keyManagerFactory.init(defaultKeyStore, "".toCharArray());

SSLContext ctx = SSLContext.getInstance("SSL");
ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);

но это не сработало. обычное исключение "peer not authenticated". Полагаю, это потому, что мне нужен соответствующий закрытый ключ, но получить его невозможно ...

1 Ответ

1 голос
/ 14 марта 2012

Если вы хотите доверять, например, одному конкретному сертификату сервера, вы можете добавить сертификат X.509 в ваш путь к классу и использовать javax.net.ssl.X509TrustManager (созданный из вашего TrustManagerFactory).Тогда не требуется хранилище ключей (и keytool).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...