Я пытаюсь отправить сертификат Клиента на сервер. Я строю SSLSocketFactory на HttpURLConnection.java HttpsURLConnection и отправка клиентских сертификатов
Я думаю, что мне нужно сделать ключ доступным через KeyManager, о котором знает SSLSocketFactory. У меня возникла проблема с получением ключа в KeyManager.
Закрытый ключ и сертификат находятся в файле PEM (и они не могут быть в файле хранилища ключей). Я знаю, как читать/декодировать файл, и я успешно проверил сертификат клиента. Но когда я пытаюсь поставить ключ (как байт []) в KeyManager, он жалуется: java.security.KeyStoreException: key is not encoded as EncryptedPrivateKeyInfo
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null); // init the keystore
// This Fails: it wants it encoded as EncryptedPrivateKeyInfo
ks.setKeyEntry("MyAlias", clientKeyAsBytes, new Certificate[]{clientCert});
Что правильный способ сделать это?
Просто так, что я лучше понять корень ваша проблема, в каком контексте вы это делаете? Существует множество библиотек и фреймворков, которые могут автоматически обрабатывать такие вещи для вас. Одной из таких библиотек является библиотека JSch (J Secure Channel). –
Это код для клиентов, которые не хотят использовать какие-либо дополнительные библиотеки (которые должны быть проверены). Клиент вызывает веб-службу, для которой требуется авторизация клиента. И развертывание использует файлы .PEM. –