Хотя я был знаком с HTTPS и концепцией SSL, я недавно начал некоторую разработку и обнаружил, что немного растерялся.
Требовалось, чтобы я написал небольшое приложение Java, работающее на компьютере, подключенном к сканеру. Когда документ сканируется, он берется и файл (обычно PDF) отправляется через Интернет на наш сервер приложений, который затем обрабатывает его. Я написал приложение, используя библиотеки Apache Commons и HTTPClient.
Вторым требованием было подключение по SSL, требующий сертификат. Следуя инструкциям на странице HTTPclient, я использую AuthSSLProtocolSocketFactory со страницы вкладов.
Конструктор может принимать пароль хранилища ключей, пароль хранилища ключей, хранилище доверенных сертификатов и пароль хранилища доверенных сертификатов. В качестве начального теста наш DBA включил SSL на одном из наших веб-серверов разработки и предоставил мне файл .p12, который при импорте в IE позволяет мне успешно подключаться.
Я немного запутался между хранилищами ключей и доверенными хранилищами и тем, какие шаги мне нужно предпринять, используя keytool. Я попытался импортировать p12 в файл хранилища ключей, но получил ошибку:
keytool error: java.lang.Exception: Input not an X.509 certificate
Я последовал предложению импортировать p12 в Internet Explorer и экспортировать как .cer, который затем можно успешно импортировать в хранилище ключей. Когда я предоставляю это в качестве аргумента хранилища ключей AuthSSLProtocolSocketFactory, я получаю бессмысленную ошибку, но если я пытаюсь сделать это как хранилище доверенных сертификатов, мне кажется, что он хорошо читает, но в итоге я получаю
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
Я не уверен, что пропустил некоторые шаги, неправильно понимаю SSL и взаимную аутентификацию или это неверная конфигурация на стороне сервера.
Может кто-нибудь дать предложения или указать мне ресурсы, которые могут помочь мне разобраться, пожалуйста?