| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Создание двунаправленного https |
| Автор: regen 16.5.2007, 16:38 |
| Добрый день. Есть Apache веб-сервер с настроенным openssl. Для доступа к определённой странице необходимо предоставить пользовательский сертификат (т.е. авторизуется как сервер так и клиент). Теперь проблема: как программно из Java-приложения обратиться к данной странице (при этом корректно предоставив свой сертификат)? Добавлю, что сертификат уже находится в хранилище сертификатов (в хранилище, который используется IE) в машине клиента. Если есть пример, то хотелось бы увидеть... Заранее благодарю за ответы. |
| Автор: ekr 17.5.2007, 12:56 |
| посмотри http://java.sun.com/products/jsse/install.html, особенно 8 и 9 пункты. Не получится - пиши, разберемся ) PS ты знаком с терминами keyStore, trustStore, jks ? |
| Автор: regen 17.5.2007, 14:56 | ||
| 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 17.5.2007, 23:27 | ||||||||
это гораздо больше, чем многие )
Не знаю...( Это надо к MS-админам обратиться. Я поискал у себя на машине с установленными сертификатами в IE, но поиск не дал результатов... Видно, IE не хранит сертификаты как файлы, а использует что-то вроде jks, какое-нить свое хранилище. Надо у них уточнить.
Это как раз в мануале должно быть (как для jks, так и для pem/der). В свое время пробовал (давно, правда).
Имеешь в виду клиентский код? В мануале есть пример. Или как настроить Apache? В его файле конфигурации httpd.conf прописываешь настройки ssl-соединений - ssl-порт, сертификаты, etc. |
| Автор: regen 18.5.2007, 15:25 | ||||||||
Просмотрел ещё раз страницу ссылку на которую ты мне скинул...
Ну так вот... Пересмотрел я... Не нашёл... Можешь пример скинуть? Только вот не используя сокеты. Просто HTTP-запросы...
Да. Именно клиентский. Апач уже настроен соответствующим образом. Пример не нашёл.. Может я не тот мануал смотрю )))? Хотя мне кажется что если решится проблема с "подпихиванием" решится и эта... |
| Автор: ekr 18.5.2007, 16:22 | ||
о как... я-то как раз в свое время сокетного клиента писал.
а как? класс ULR? в твоем случае надо еще найти, где IE сертификаты хранит. слушай, в этом случае мало чем смогу помочь ( у меня немного другой опыт был ( |
| Автор: regen 18.5.2007, 22:11 |
| Тогда подойду к проблеме с другого бока... Можно ли заставить апач понимать сервлеты? Т.е. написать https-сеанс на сокетах, сделать сервлет, клиента, сервлет закинуть на сервер и работать таким образом? Или Apache не поддерживает сервлеты? Может вопрос глуп... Я просто не совсем разбираюсь в этом. Точнее никак не разбираюсь.. =) |
| Автор: ekr 19.5.2007, 13:27 |
| Понимаешь, неважно, что у тебя на серверной стороне - servlets или php. Загвоздка как раз в клиенте. Если ты напишешь нужный тебе клиент (который подтягивает сертификаты из хранилища IE), то с помощью него ты сможешь работать с любым http-сервером. |
| Автор: regen 19.5.2007, 15:19 | ||
| Во как... Интересно... Т.е. схема примерно такова: 1) клиент конектится сокетом к 443 порту веб-сервера 2) составляется запрос, который через OutputStream отсылается на 443 порт веб-серверу (на адрес скрипта) 3) клиент слушает InputStream и ловит ответ.... Клиент как я понимаю можно взять такой:
/*********Добавил**********/ PS: Нашёл где Windows хранит сертификаты. C:\Documents and Settings\Администратор\Application Data\Microsoft\SystemCertificates\My Имя файла - отпечаток сертификата. Но открыть их не удаётся.. ВИдимо зашифрованны.. Жаль... |