![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Есть сервлет на томкате, есть 4 клиента. Для каждого клиента есть 4 сертификата, хранящихся в keystore.
Хотелось бы сделать так, чтобы сервлет при запросе от конкретного клиента выпонял конкретное действие. С сервером непонятно как выбрать конкретный сертификат. И как можно организовать реализацию ssl-соединения в клиенте ? Может кто-то реализововывал нечто похожее? |
|||
|
||||
| Zamuta |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
olegrolik,
А зачем 4 ? Просто не понимаю.
А это нужно обязательно завязать через сертификаты?
Для томката в server.xml:
-------------------- Thank you opensource. |
||||||
|
|||||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Возможно я что-то не верно понимаю.
Я хочу сделать так: есть 4 пользователя. Заходит первый пользователь (т.е. вызывает метод post сервлета), ему передаётся файл first.txt. Второму - second.txt ну и т.д. Чтобы определять кому что передавать, думается, и нужен сертификат. Насчёт server.xml это ясно. Непонятно другое - как выбирать конкретный сертификат из keystoreFile. А это нужно обязательно завязать через сертификаты? - А как можно ещё? |
|||
|
||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 2 Всего: 20 |
дык, в кейсторе ведь не храняться пользователькие сертифкаты, для определения who is who у каждого пользователя должен быть свой сертификат
почетай про понятия аутентифкации и авторизации в принцепе, может тебе вообще ssl(и сертификаты) то и не нужен -------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| olegrolik |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Как определить какой именно юзер коннектится? Я имею ввиду программно (код).
Аутентификация и авторизация, я так понимаю, относится к удостоверящим центрам. Верно? SSL мне нужен по очень простой причине - ХОЧУ! Добавлено через 7 минут и 17 секунд jsa, насчёт авторизации. Это гарантия того, что данные которыми клиент и сервер обмениваются, закодированы и нечитамы для других?? |
||||
|
|||||
| vzf |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 10.9.2005 Репутация: 2 Всего: 5 |
Аутентификация - процесс проверки идентификационных данных пользователя. Т.е. определение , действительно ли пользователь тот, кем представился. Авторизация - процесс установки прав доступа пользователя к объектам информационной системы, требующих разграничения доступа. --------------------
Java - Write Once, Test EveryWhere! |
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Okey, понятно.
Вобщем так: на серваке есть сертификат. С его помощью у нас будет осуществляться связь с клиентом. Настройки сервера понятны. А как быть клиенту? У него есть эта копия сертификата, которой он пользуется или как? Читал доки про ssl, но о настройках клиента не нашёл ничего. |
|||
|
||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 2 Всего: 20 |
Вобщем так: у пользователя есть пользовательский сертифакт, который удостоверяет что пользователь, тот, за кого себя выдает, у сервака свой сертификат, оба - желательно должны быть подписаны одним цетром сертификации, + на сервере должен быть СА сертификат (тобишь серфтификат самого центра) (+ приватный ключ) (все три состовляющие хранятся в кейсторе, там jks или pkcs) так вот когда пользователь заходит со своим сертификатом по https на сервер, то в среде сервера может быть сгенерированы некоторые переменные, например SSL_CLIENT_S_DN_Email, которая имеет значение электронного адреса пользователя (вот хотя бы один способ аутентификации) Но ест-но сервер должен быть сконфигурирован для того чтобы 1 определять че делать с пользователями без сертификатов и с невалидными сертификатами 2 генерировать переменные среды сервера вот примерно как должно быть -------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| olegrolik |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Спасибо, стало немного понятно, но возникли вопросы: откуда брать приватный ключ?
оно?
А что находится у пользователя? Т.е. какие пути и всё такое? И как он использует приватный ключ? Насчёт генерации некоторых переменных: это уже механизм ssl веб сервера (tomcat), т.е. такие тонкости можно и не знать? |
||||||
|
|||||||
| jsa |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 2 Всего: 20 |
1 - точно не помню, надо смотреть в доках 2 - У пользователя находиться только его пользовательский сертификат, и все, пользователь не работает с приватным ключем, с ним работает только сервер, пользовательский сертификат использует браузеры 3 - да сходи на http://www.openssl.org/docs/ еще почитай файлик который я вложу Присоединённый файл ( Кол-во скачиваний: 18 )
docs.zip 39,69 Kb-------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
||||||
|
|||||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
||||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Может тогда ты сможешь помочь? Изучать SSL мне надо для того чтобы разобраться в рабочей программе, которая принимает файлы от нескольких клиентов. Программа запущена под jserv (Это Java-модуль для сервера apache). Кстати, jserv уже не поддерживается лет 6. Я хочу это приложение перевести на tomcat, но никто мне не может объяснить (в моём отделе) как именно всё работает (я имею ввиду SSL). Говорят только, что для каждого клиента есть свой сертификат. Вообще программ там несколько, т.е. для каждого клиента она своя. Вопрос мой такой - как можно сделать одно приложение, которое будет использовать разные сертификаты в зависимости от того, какой клиент будет подключаться? |
|||
|
||||
| olegrolik |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Блин. Не заметил сразу, что можно ведь в server.xml написать для нескольких портов свой Connector:
По идее можно ведь так? Буду пробовать... Но уже завтра. От SSL уже бошка болит. Добавлено @ 17:21 Это сообщение отредактировал(а) olegrolik - 10.10.2007, 17:22 |
||||
|
|||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
olegrolik, конкртено для apache - не пробовал делал. Будет время, наверное в субботу, попробую настроить.
|
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
написал небольшой фак.
http://forum.vingrad.ru/faq/topic-177048/a...y1286681/0.html будут вопросы - задавай |
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Отличный фак. Есть один вопрос по настройке клиента не через браузер. Т.е. я хочу программно устанавливать связь со своим сервлетом, используя апачевский HTTP-client. Например, используя клиентский сертификат, приконнектится к сервлету? В какую сторону копать (т.е. какие api использовать) ? |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
попробуй посмотреть здесь http://jakarta.apache.org/httpcomponents/h...x/sslguide.html и здесь http://svn.apache.org/viewvc/jakarta/httpc...ava?view=markup Это сообщение отредактировал(а) Alexandr87 - 15.10.2007, 14:20 |
|||
|
||||
| olegrolik |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
С my.truststore всё понятно - работает. А вот с my.keystore - проблема. Я так понимаю, что в my.keystore должен храниться пользовательский сертификат + приватный ключ пользователя. Создаю my.keystore вот так:
Но при выполнении кода, вылетает ошибка:
Есть предложения ? |
||||||
|
|||||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
Есть - набрать в гугле p12 to jks
|
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
А почему бы вместо my.keystore не использовать .truststore ? Это ведь одно и тоже. Но при использовании выдаёт ту же ошибку : Exception in thread "main" java.security.KeyStoreException: No private keys found in keystore! |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
Truststore - это хранилище доверенных сертификатов - сертификатов различных центров эмисси сертификатов (т.е. только сертификаты - без ключей), которым вы доверяете Т.е. сертификаты подписанные соответствующим данному сертификату секретным ключом - будут считаться валидными. В mykeystore - хранятся личный прайвит ключ и сертификат. Собственно поэтому. Я бы, все-таки, реккомендовал ознакомиться с концепцией PKI. А, что с гуглем? |
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Я запутался.
Последовательность такая (если нет, то поправьте, пожалуйста): у меня есть сертификат clientCert.pfx. Мне надо его перевести из формата pkcs12 в формат jks, т.е. получить clientCert.crt Затем, добавить этот сертификат в хранилище my.keystore. Теперь о самом переводе из одного формата в другой: нашёл вот что: keytool -export -keystore test3_fromie.pfx -storetype PKCS12 -alias adcc1680792a -file exp2 Но какой alias у моего пользовательского сертификата? Может у кого-то есть готовый скрипт? Поделитесь, пожалуйста. |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
тут вроде одной командой можно keytool -importkeystore -srcstoretype pkcs12 -srckeystore client.p12 -destkeystore .mystore Собственно да, у вас есть сертификат и ключ в формате pkcs#12, вам нужно перевести их в JKS - формат хранилища сертификатов и ключей, ипользуемый в большинстве Java приложений. crt - тут вообще не при чем. Ну и добавлять соотвественно никуда ничего не нужно, вы просто конвертируете из одного формата в другой. |
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Alexandr87, я делал вот так:
keytool -importkeystore -srcstoretype pkcs12 -srckeystore clientCert.pfx -destkeystore .mystore Получил .mystore
Та же ошибка: No private keys found in keystore! Можно конечно забить на создание клиента и использовать браузер, но этот вариант меня не устраивает :( Это сообщение отредактировал(а) olegrolik - 16.10.2007, 15:17 |
|||
|
||||
| Alexandr87 |
|
||||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
Тока что попробовал, у мну все заработало
Вот шаги, которые я сделал после того, как заканчивается фак. 1. Конвертируем p12 криптоконтейнер в формат JKS
При этом, очень важно, чтобы для доступа к JKS контейнеру исполозовался точно такой же пароль, который использовался для p12 контейнера.(Потому, как в комментариях к конструктору класса org.apache.commons.httpclient.contrib.ssl.AuthSSLProtocolSocketFactory явно указывается, что пароль на private ключ и на весь контейнер должен быть одним и тем же. Если мы укажем другой пароль для JKS контейнера, то на сам контейнер пароль сменится, а доступ к Private ключу должен будет осуществлятся по старому паролю). Это мне кажется наиболее веротяной причиной, почему у вас на данный момент выдает ошибку No private keys found in keystore! 2. Подготовил непосредственно код, который будет использовать http-client (при этом добавил следующие классы из org.apache.commons.httpclient.contrib.ssl :AuthSSLInitializationError, AuthSSLProtocolSocketFactory, AuthSSLX509TrustManager. Может еще какие нужны, но у меня заработало и на этом).
Получил :
Это сообщение отредактировал(а) Alexandr87 - 16.10.2007, 18:15 |
||||||
|
|||||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Сделал всё заново. Ошибка таже
Не мог бы ты выложить jar с этими классами? Может в них дело. А вообще почему .keystore должен быть именно в формате jks? Вот ещё: java -cp not-yet-commons-ssl-0.3.8.jar org.apache.commons.ssl.KeyStoreBuilder mypass c:/clientCert.pfx получил файл client.jks Использую его вместо .mystore Эффект тот же. Это сообщение отредактировал(а) olegrolik - 17.10.2007, 11:02 |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
Вот тут сертификаты, с которыми у меня все работает. Пароли от всех контейнеров 123456 http://avarlamov.net/files/art.tar.gz для сервера .truststore, tomcatCert.pfx для клиента .trussttore, .mystore Не забудьте заменить соответствующие файлы на сервере. Здесь три апачевских класса, но уверен, что проблемма не в них. http://avarlamov.net/files/apache-contrib.tar.gz Если ничего не поможет, выложите не просто наименование ошибки, а полный стэк-трейс. |
|||
|
||||
| olegrolik |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Всё это очень странно. Я делаю следующее: Взял файлы .trustore и .mystore из архива твоего. Сервер даже не настраивал.
Код программы:
Т.е. код вообще такой-же, как у тебя. Используемая библиотека для ssl - not-yet-commons-ssl-0.3.8.jar Ошибка:
Спасибо за помощь! |
||||
|
|||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
хм, а я вообще никакую отдельную библиотеку не использую. У меня в CLASSPATH только commons-codec-1.3.jar, commons-httpclient-3.1.jar, commons-logging-1.1.jar + jar с тремя файлами из org.apache.commons.httpclient.contrib.ssl и все работает. Т.е. org.apache.commons.ssl.KeyMaterial у меня вообще нет. Попробуйте убрать эту библиотеку. |
|||
|
||||
| olegrolik |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Огромное спасибо. Ключи найдены.
|
|||
|
||||
![]()
|
| Правила форума "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. |