Использование HttpClient с SSL и сертификатами - PullRequest
1 голос
/ 05 мая 2010

Хотя я был знаком с 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 и взаимную аутентификацию или это неверная конфигурация на стороне сервера.

Может кто-нибудь дать предложения или указать мне ресурсы, которые могут помочь мне разобраться, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

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

Вот несколько ссылок, которые могут быть полезны:

java.lang.Exception: Введите не сертификат X.509

Импорт закрытого ключа и сертификата в хранилище ключей Java

Настройка хранилищ ключей и трастовых хранилищ

1 голос
/ 18 апреля 2012

убедитесь, что в вашем файле сертификата нет ничего до и после них.

----- НАЧАТЬ СЕРТИФИКАТ -----

----- КОНЕЦ СЕРТИФИКАТ -----

...