![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| regen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Добрый день.
Есть Apache веб-сервер с настроенным openssl. Для доступа к определённой странице необходимо предоставить пользовательский сертификат (т.е. авторизуется как сервер так и клиент). Теперь проблема: как программно из Java-приложения обратиться к данной странице (при этом корректно предоставив свой сертификат)? Добавлю, что сертификат уже находится в хранилище сертификатов (в хранилище, который используется IE) в машине клиента. Если есть пример, то хотелось бы увидеть... Заранее благодарю за ответы. |
|||
|
||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
посмотри сюда, особенно 8 и 9 пункты.
Не получится - пиши, разберемся ) PS ты знаком с терминами keyStore, trustStore, jks ? |
|||
|
||||
| regen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
ekr, большое спасибо за ответ.
Но мне надо не совсем то. В мануале используется keytool. В моём случае не совсем понимаю как keytool может быть использован. Потому что: 1) клиент имеет файл в формате pkcs#12. Т.е. у него нет отдельно сертификата и ключа. Он с помощью виндовой утилиты экспортирует его в виндовое хранилище сертификатов (то, которое используется IE) 2) Клиент не будет из консоли экспортировать всё в java-хранилище. Для этого у него не хватит мозгов... (Увы...) 3) Мне надо используя https-соединение отправлять запрос на уже готовые php-скрипты. Т.е. сервлеты похоже не помогут. Теперь попытаю поподробнее объяснить саму задачу: Мне надо из под клиентской java-программы установить https-соединение (в котором бы авторизовался как клиент, так и сервер. Т.е. необходимо предоставить серверу свой сертификат (который уже находится в виндовом хранилище сертификатов), так и сервер нам должен предоставить свой (что делается в обычном https-соединении в котором клиент не авторизуется). Затем после установлении соединения нам надо на php-скрипт отправить запрос (по протоколу https) и получить ответ от него. Теперь сформулирую то что мне непонятно: 1) Как заставить java использовать хранилище сертификатов которое использует IE? 2) Как подпихнуть сертификат из этого хранилища для установления https-соединения? 3) Как установить само двунаправленное https-соединение к php-скрипту на сервере? //--------------------------------
Вроде что-то знаю.... Keystore — представляет собой базу данных, в которой хранятся пары ключей и сертификаты которые используются при выполнении аутентификации клиента и сервера при SSL соединении. Когда клиент начинает соединение SSL, то он берет ключи и сертификаты из “keystore” для того чтобы предоставить информацию о себе. Truststore — используется для того чтобы проверить ту информацию которую предлагает другой участник коммуникации, например он предлагает собственный сертификат который подписан некоторым институтом CA, в данном случае из truststore извлекается список доверенных CA и идет поиска того кто подписал данный сертификат, если такового издателя не будет найдено, то тому кто предоставил данный сертификат не будет доверия и соединение не состоится. jks = "java key storage". Это формат даных хранилища. |
|||
|
||||
| ekr |
|
||||||||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
это гораздо больше, чем многие )
Не знаю...( Это надо к MS-админам обратиться. Я поискал у себя на машине с установленными сертификатами в IE, но поиск не дал результатов... Видно, IE не хранит сертификаты как файлы, а использует что-то вроде jks, какое-нить свое хранилище. Надо у них уточнить.
Это как раз в мануале должно быть (как для jks, так и для pem/der). В свое время пробовал (давно, правда).
Имеешь в виду клиентский код? В мануале есть пример. Или как настроить Apache? В его файле конфигурации httpd.conf прописываешь настройки ssl-соединений - ssl-порт, сертификаты, etc. |
||||||||
|
|||||||||
| regen |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Просмотрел ещё раз страницу ссылку на которую ты мне скинул...
Ну так вот... Пересмотрел я... Не нашёл... Можешь пример скинуть? Только вот не используя сокеты. Просто HTTP-запросы...
Да. Именно клиентский. Апач уже настроен соответствующим образом. Пример не нашёл.. Может я не тот мануал смотрю )))? Хотя мне кажется что если решится проблема с "подпихиванием" решится и эта... |
||||||||
|
|||||||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
о как... я-то как раз в свое время сокетного клиента писал.
а как? класс ULR? в твоем случае надо еще найти, где IE сертификаты хранит. слушай, в этом случае мало чем смогу помочь ( у меня немного другой опыт был ( |
|||
|
||||
| regen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Тогда подойду к проблеме с другого бока... Можно ли заставить апач понимать сервлеты? Т.е. написать https-сеанс на сокетах, сделать сервлет, клиента, сервлет закинуть на сервер и работать таким образом?
Или Apache не поддерживает сервлеты? Может вопрос глуп... Я просто не совсем разбираюсь в этом. Точнее никак не разбираюсь.. =) |
|||
|
||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Понимаешь, неважно, что у тебя на серверной стороне - servlets или php.
Загвоздка как раз в клиенте. Если ты напишешь нужный тебе клиент (который подтягивает сертификаты из хранилища IE), то с помощью него ты сможешь работать с любым http-сервером. |
|||
|
||||
| regen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Во как... Интересно...
Т.е. схема примерно такова: 1) клиент конектится сокетом к 443 порту веб-сервера 2) составляется запрос, который через OutputStream отсылается на 443 порт веб-серверу (на адрес скрипта) 3) клиент слушает InputStream и ловит ответ.... Клиент как я понимаю можно взять такой:
/*********Добавил**********/ PS: Нашёл где Windows хранит сертификаты. C:\Documents and Settings\Администратор\Application Data\Microsoft\SystemCertificates\My Имя файла - отпечаток сертификата. Но открыть их не удаётся.. ВИдимо зашифрованны.. Жаль... Это сообщение отредактировал(а) regen - 19.5.2007, 15:51 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |