Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ssl tomcat 
V
    Опции темы
olegrolik
Дата 8.10.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Есть сервлет на томкате, есть 4 клиента. Для каждого клиента есть 4 сертификата, хранящихся в keystore. 
Хотелось бы сделать так, чтобы сервлет при запросе от конкретного клиента выпонял конкретное действие. 
С сервером непонятно как выбрать конкретный сертификат.
И как можно организовать реализацию ssl-соединения в клиенте ? 
Может кто-то реализововывал нечто похожее?
PM MAIL   Вверх
Zamuta
Дата 8.10.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



olegrolik, 
Цитата(olegrolik @  8.10.2007,  19:22 Найти цитируемый пост)
Для каждого клиента есть 4 сертификата, хранящихся в keystore. 

А зачем 4 ? Просто не понимаю.

Цитата(olegrolik @  8.10.2007,  19:22 Найти цитируемый пост)
Хотелось бы сделать так, чтобы сервлет при запросе от конкретного клиента выпонял конкретное действие. 

А это нужно обязательно  завязать  через сертификаты?

Цитата(olegrolik @  8.10.2007,  19:22 Найти цитируемый пост)
С сервером непонятно как выбрать конкретный сертификат.
И как можно организовать реализацию ssl-соединения в клиенте ? 


Для томката в server.xml:
Код

<Connector SSLEnabled="true"
              acceptCount="100" 
              clientAuth="true" 
              compression="on"
              debug="0"
              disableUploadTimeout="true"
              enableLookups="true"
              keystoreFile="${user.home}/.keystore"
              keystorePass="pass"  
              maxSpareThreads="75"
              maxThreads="200"
              minSpareThreads="5" 
              port="8443"
              scheme="https"
              secure="true" 
              sslProtocol="TLS"/>        



--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
olegrolik
Дата 9.10.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Возможно я что-то не верно понимаю.
Я хочу сделать так: есть 4 пользователя.
Заходит первый пользователь (т.е. вызывает метод post сервлета), ему передаётся файл first.txt.
Второму - second.txt ну и т.д.
Чтобы определять кому что передавать, думается, и нужен сертификат.
Насчёт server.xml это ясно. Непонятно другое - как выбирать конкретный сертификат из keystoreFile.

А это нужно обязательно  завязать  через сертификаты? - А как можно ещё?
PM MAIL   Вверх
jsa
Дата 9.10.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



дык, в кейсторе ведь не храняться пользователькие сертифкаты, для определения who is who у каждого пользователя должен быть свой сертификат
Цитата

А это нужно обязательно  завязать  через сертификаты? - А как можно ещё?

почетай про понятия аутентифкации и авторизации в принцепе, может тебе вообще ssl(и сертификаты) то и не нужен


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
olegrolik
Дата 9.10.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата

дык, в кейсторе ведь не храняться пользователькие сертифкаты, для определения who is who у каждого пользователя должен быть свой сертификат

Как определить какой именно юзер коннектится? Я имею ввиду программно (код).

Цитата

почетай про понятия аутентифкации и авторизации в принцепе, может тебе вообще ssl(и сертификаты) то и не нужен

Аутентификация и авторизация, я так понимаю, относится к удостоверящим центрам. Верно?
SSL мне нужен по очень простой причине - ХОЧУ!  smile

Добавлено через 7 минут и 17 секунд
jsa, насчёт авторизации. Это гарантия того, что данные которыми клиент и сервер обмениваются, закодированы и нечитамы для других??
PM MAIL   Вверх
vzf
Дата 9.10.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: 2
Всего: 5



Цитата

Аутентификация и авторизация, я так понимаю, относится к удостоверящим центрам. Верно?


Аутентификация - процесс проверки идентификационных данных пользователя. Т.е. определение , действительно ли пользователь тот, кем представился.

Авторизация - процесс установки прав доступа пользователя к объектам информационной системы, требующих разграничения доступа.
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
olegrolik
Дата 9.10.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Okey, понятно. 
Вобщем так: на серваке есть сертификат. С его помощью у нас будет осуществляться связь с клиентом. Настройки сервера понятны. А как быть клиенту? У него есть эта копия сертификата, которой он пользуется или как? Читал доки про ssl, но о настройках клиента не нашёл ничего.  smile 
PM MAIL   Вверх
jsa
Дата 9.10.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



Цитата(olegrolik @ 9.10.2007,  21:02)
Okey, понятно. 
Вобщем так: на серваке есть сертификат. С его помощью у нас будет осуществляться связь с клиентом. Настройки сервера понятны. А как быть клиенту? У него есть эта копия сертификата, которой он пользуется или как? Читал доки про ssl, но о настройках клиента не нашёл ничего.  smile

Вобщем так: 
у пользователя есть пользовательский сертифакт, который удостоверяет что пользователь, тот, за кого себя выдает, у сервака свой сертификат, оба - желательно должны быть подписаны одним цетром сертификации, + на сервере должен быть СА сертификат (тобишь серфтификат самого центра) (+ приватный ключ) (все три состовляющие хранятся в кейсторе, там jks или pkcs)
так вот когда пользователь заходит со своим сертификатом по https на сервер, то в среде сервера может быть сгенерированы некоторые переменные, например SSL_CLIENT_S_DN_Email, которая имеет значение электронного адреса пользователя (вот хотя бы один способ аутентификации)
Но ест-но сервер должен быть сконфигурирован для того чтобы
1 определять че делать с пользователями без сертификатов и с невалидными сертификатами
2 генерировать переменные среды сервера

вот примерно как должно быть


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
olegrolik
Дата 9.10.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(jsa @ 9.10.2007,  16:37)
Вобщем так: 
у пользователя есть пользовательский сертифакт, который удостоверяет что пользователь, тот, за кого себя выдает, у сервака свой сертификат, оба - желательно должны быть подписаны одним цетром сертификации, + на сервере должен быть СА сертификат (тобишь серфтификат самого центра) (+ приватный ключ) (все три состовляющие хранятся в кейсторе, там jks или pkcs)
так вот когда пользователь заходит со своим сертификатом по https на сервер, то в среде сервера может быть сгенерированы некоторые переменные, например SSL_CLIENT_S_DN_Email, которая имеет значение электронного адреса пользователя (вот хотя бы один способ аутентификации)
Но ест-но сервер должен быть сконфигурирован для того чтобы
1 определять че делать с пользователями без сертификатов и с невалидными сертификатами
2 генерировать переменные среды сервера

вот примерно как должно быть

Спасибо, стало немного понятно, но возникли вопросы:
откуда брать приватный ключ? 
Код

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA

оно?

Цитата
так вот когда пользователь заходит со своим сертификатом

А что находится у пользователя? Т.е. какие пути и всё такое? И как он использует приватный ключ?

Насчёт генерации некоторых переменных: это уже механизм ssl веб сервера (tomcat), т.е. такие тонкости можно и не знать?
PM MAIL   Вверх
jsa
Дата 10.10.2007, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 2
Всего: 20



Цитата(olegrolik @ 9.10.2007,  22:03)
Спасибо, стало немного понятно, но возникли вопросы:
откуда брать приватный ключ? 
Код

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA

оно?

Цитата
так вот когда пользователь заходит со своим сертификатом

А что находится у пользователя? Т.е. какие пути и всё такое? И как он использует приватный ключ?

Насчёт генерации некоторых переменных: это уже механизм ssl веб сервера (tomcat), т.е. такие тонкости можно и не знать?

1 - точно не помню, надо смотреть в доках
2 - У пользователя находиться только его пользовательский сертификат, и все, пользователь не работает с приватным ключем, с ним работает только сервер, пользовательский сертификат использует браузеры
3 - да

сходи на http://www.openssl.org/docs/
еще почитай файлик который я вложу

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  docs.zip 39,69 Kb


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Alexandr87
Дата 10.10.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(jsa @  10.10.2007,  06:24 Найти цитируемый пост)
2 - У пользователя находиться только его пользовательский сертификат, и все, пользователь не работает с приватным ключем, с ним работает только сервер, пользовательский сертификат использует браузеры


хм, реккомендую вам тоже почитать немного на тему SSL.
PM Jabber   Вверх
olegrolik
Дата 10.10.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата

хм, реккомендую вам тоже почитать немного на тему SSL. 


Может тогда ты сможешь помочь?

Изучать SSL мне надо для того чтобы разобраться в рабочей программе, которая принимает файлы от нескольких клиентов. Программа запущена под jserv (Это Java-модуль для сервера apache). Кстати, jserv уже не поддерживается лет 6. 
Я хочу это приложение перевести на tomcat, но никто мне не может объяснить (в моём отделе) как именно всё работает (я имею ввиду SSL). 
Говорят только, что для каждого клиента есть свой сертификат. Вообще программ там несколько, т.е. для каждого клиента она своя. Вопрос мой такой - как можно сделать одно приложение, которое будет использовать разные сертификаты в зависимости от того, какой клиент будет подключаться?
PM MAIL   Вверх
olegrolik
Дата 10.10.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Блин. Не заметил сразу, что можно ведь в server.xml написать для нескольких портов свой Connector:
Код

<Connector 
           port="8443" minProcessors="5" maxProcessors="75"
           enableLookups="true" disableUploadTimeout="true"
           keystoreFile="..."
           acceptCount="100" debug="0" scheme="https" secure="true";
           clientAuth="false" sslProtocol="TLS"/>


Код

<Connector 
           port="8444" minProcessors="5" maxProcessors="75"
           enableLookups="true" disableUploadTimeout="true"
           keystoreFile="..."
           acceptCount="100" debug="0" scheme="https" secure="true";
           clientAuth="false" sslProtocol="TLS"/>


По идее можно ведь так? Буду пробовать... Но уже завтра. От SSL уже бошка болит. smile

Добавлено @ 17:21


Это сообщение отредактировал(а) olegrolik - 10.10.2007, 17:22
PM MAIL   Вверх
Alexandr87
Дата 11.10.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



olegrolik, конкртено для apache - не пробовал делал. Будет время, наверное в субботу, попробую настроить.
PM Jabber   Вверх
Alexandr87
Дата 14.10.2007, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



написал небольшой фак.
http://forum.vingrad.ru/faq/topic-177048/a...y1286681/0.html

будут вопросы - задавай
PM Jabber   Вверх
olegrolik
Дата 15.10.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(Alexandr87 @ 14.10.2007,  07:46)
написал небольшой фак.
http://forum.vingrad.ru/faq/topic-177048/a...y1286681/0.html

будут вопросы - задавай

Отличный фак. Есть один вопрос по настройке клиента не через браузер. Т.е. я хочу программно устанавливать связь со своим сервлетом, используя апачевский HTTP-client. 
Например, используя клиентский сертификат, приконнектится к сервлету?
В какую сторону копать (т.е. какие api использовать) ?
PM MAIL   Вверх
Alexandr87
Дата 15.10.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата

Отличный фак. Есть один вопрос по настройке клиента не через браузер. Т.е. я хочу программно устанавливать связь со своим сервлетом, используя апачевский HTTP-client. 
Например, используя клиентский сертификат, приконнектится к сервлету?
В какую сторону копать (т.е. какие api использовать) ?



попробуй посмотреть здесь 
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
PM Jabber   Вверх
olegrolik
Дата 15.10.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Код

Protocol authhttps = new Protocol("https",  
           new AuthSSLProtocolSocketFactory(
               new URL("file:my.keystore"), "mypassword",
               new URL("file:my.truststore"), "mypassword"), 443); 
               Protocol.registerProtocol("https", authhttps);


С my.truststore всё понятно - работает.
А вот с my.keystore - проблема.
Я так понимаю, что в my.keystore должен храниться пользовательский сертификат + приватный ключ пользователя.
Создаю my.keystore вот так: 
Код

keytool -import -keystore my.keystore -file clientCert.pfx

Но при выполнении кода, вылетает ошибка:


Код

Exception in thread "main" java.security.KeyStoreException: No private keys found in keystore!
        at org.apache.commons.ssl.KeyStoreBuilder.validate(KeyStoreBuilder.java:245)
        at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:112)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:125)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:117)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:62)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:105)
        at org.apache.commons.httpclient.contrib.ssl.AuthSSLProtocolSocketFactory.<init>(AuthSSLProtocolSocketFactory.java:185)
        at PostXML.main(PostXML.java:64)
Java Result: 1



Есть предложения ?
PM MAIL   Вверх
Alexandr87
Дата 16.10.2007, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Есть - набрать в гугле p12 to jks
PM Jabber   Вверх
olegrolik
Дата 16.10.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(Alexandr87 @ 16.10.2007,  03:54)
Есть - набрать в гугле p12 to jks

А почему бы вместо my.keystore не использовать .truststore ? Это ведь одно и тоже.
Но при использовании выдаёт ту же ошибку : Exception in thread "main" java.security.KeyStoreException: No private keys found in keystore!
PM MAIL   Вверх
Alexandr87
Дата 16.10.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(olegrolik @  16.10.2007,  13:47 Найти цитируемый пост)
А почему бы вместо my.keystore не использовать .truststore ? Это ведь одно и тоже.

Truststore - это хранилище доверенных сертификатов - сертификатов различных центров эмисси сертификатов (т.е. только сертификаты - без ключей), которым вы доверяете Т.е. сертификаты подписанные соответствующим данному сертификату секретным ключом - будут считаться валидными.
В mykeystore - хранятся личный прайвит ключ и сертификат. Собственно поэтому.
Я бы, все-таки, реккомендовал ознакомиться с концепцией PKI.

А, что с гуглем?
PM Jabber   Вверх
olegrolik
Дата 16.10.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 у моего пользовательского сертификата?


 smile 
Может у кого-то есть готовый скрипт? Поделитесь, пожалуйста.  smile 
PM MAIL   Вверх
Alexandr87
Дата 16.10.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(olegrolik @  16.10.2007,  14:53 Найти цитируемый пост)
Может у кого-то есть готовый скрипт? 

тут вроде одной командой можно
keytool -importkeystore -srcstoretype pkcs12 -srckeystore client.p12 -destkeystore .mystore


Цитата(olegrolik @  16.10.2007,  14:53 Найти цитируемый пост)
Последовательность такая (если нет, то поправьте, пожалуйста): у меня есть сертификат clientCert.pfx. Мне надо его перевести из формата pkcs12 в формат jks, т.е. получить clientCert.crt
Затем, добавить этот сертификат в хранилище my.keystore. 

Собственно да, у вас есть сертификат и ключ в формате pkcs#12, вам нужно перевести их в JKS - формат хранилища сертификатов и ключей, ипользуемый в большинстве Java приложений. crt - тут вообще не при чем. Ну и добавлять соотвественно никуда ничего не нужно, вы просто конвертируете из одного формата в другой.

PM Jabber   Вверх
olegrolik
Дата 16.10.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Alexandr87, я делал вот так:

keytool -importkeystore -srcstoretype pkcs12 -srckeystore clientCert.pfx -destkeystore .mystore

Получил .mystore

Код

Protocol authhttps = new Protocol("https",  
           new AuthSSLProtocolSocketFactory(
               new URL("file:.mystore"), "mypassword",
               new URL("file:my.truststore"), "mypassword"), 443); 

Та же ошибка: No private keys found in keystore!
 smile 
Можно конечно забить на создание клиента и использовать браузер, но этот вариант меня не устраивает :(

Это сообщение отредактировал(а) olegrolik - 16.10.2007, 15:17
PM MAIL   Вверх
Alexandr87
Дата 16.10.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Тока что попробовал, у мну все заработало smile

Вот шаги, которые я сделал после того, как заканчивается фак.
1. Конвертируем p12 криптоконтейнер в формат JKS
Цитата

keytool -importkeystore -srcstoretype pkcs12 -srckeystore clientCert.pfx -destkeystore .mystore
Enter destination keystore password:  
Keystore password is too short - must be at least 6 characters
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Entry for alias 1 successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

При этом, очень важно, чтобы для доступа к 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. Может еще какие нужны, но у меня заработало и на этом).
Код

    public static void main(String[] args)
    throws Exception {
        
        
        
        String trustoreUrl = "file:///home/alexandr/art/.truststore";
        String privstoreUrl = "file:///home/alexandr/art/.mystore";
        
        ProtocolSocketFactory socketFactory = new AuthSSLProtocolSocketFactory(
                new URL(privstoreUrl), "123456", new URL(trustoreUrl), "123456");
        
        Protocol.registerProtocol("https",
                new Protocol("https", socketFactory, 443));
        

        HttpClient httpclient = new HttpClient();
        GetMethod httpget = new GetMethod("https://localhost:8443/");
        try {
            
            httpclient.executeMethod(httpget);
            System.out.println(httpget.getStatusLine());
        } finally {
            httpget.releaseConnection();
        }
    }


Получил :
Цитата


16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:  Server certificate 1:
16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:   Subject DN: CN=Tomcat Serv, OU=tech, O=avHome, ST=Kazakhstan, C=KZ
16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:   Signature Algorithm: SHA1withRSA
16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:   Valid from: Sun Oct 14 00:50:43 ALMT 2007
16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:   Valid until: Tue Nov 13 00:50:43 ALMT 2007
16.10.2007 21:33:26 org.apache.commons.httpclient.contrib.ssl.AuthSSLX509TrustManager checkServerTrusted
INFO:   Issuer: CN=ca, OU=tech, O=avHome, ST=Kazakhstan, C=KZ
HTTP/1.1 200 OK


Это сообщение отредактировал(а) Alexandr87 - 16.10.2007, 18:15
PM Jabber   Вверх
olegrolik
Дата 17.10.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Сделал всё заново. Ошибка таже
Цитата(Alexandr87 @  16.10.2007,  18:14)

добавил следующие классы из  org.apache.commons.httpclient.contrib.ssl :AuthSSLInitializationError, AuthSSLProtocolSocketFactory, AuthSSLX509TrustManager.

Не мог бы ты выложить 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
PM MAIL   Вверх
Alexandr87
Дата 17.10.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 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

Если ничего не поможет, выложите не просто наименование ошибки, а полный стэк-трейс.
PM Jabber   Вверх
olegrolik
Дата 17.10.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Всё это очень странно. Я делаю следующее: Взял файлы .trustore и .mystore из архива твоего. Сервер даже не настраивал.
Код программы: 
Код

package client;

import java.net.URL;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.contrib.ssl.AuthSSLProtocolSocketFactory;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;

public class Client {
    
  
    public Client() {
    }    

    public static void main(String[] args)
    throws Exception {
        
        
        
        String trustoreUrl = "file:///c:/.truststore";
        String privstoreUrl = "file:///c:/.mystore";
        
        ProtocolSocketFactory socketFactory = new AuthSSLProtocolSocketFactory(
                new URL(privstoreUrl), "123456", new URL(trustoreUrl), "123456");
        
        Protocol.registerProtocol("https",
                new Protocol("https", socketFactory, 443));
        

        HttpClient httpclient = new HttpClient();
        GetMethod httpget = new GetMethod("https://localhost:8443/");
        try {
            
            httpclient.executeMethod(httpget);
            System.out.println(httpget.getStatusLine());
        } finally {
            httpget.releaseConnection();
        }
    }
    
}



Т.е. код вообще такой-же, как у тебя. Используемая библиотека для ssl - not-yet-commons-ssl-0.3.8.jar

Ошибка:
Код

Exception in thread "main" java.security.KeyStoreException: No private keys found in keystore!
        at org.apache.commons.ssl.KeyStoreBuilder.validate(KeyStoreBuilder.java:245)
        at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:112)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:125)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:117)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:62)
        at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:105)
        at org.apache.commons.httpclient.contrib.ssl.AuthSSLProtocolSocketFactory.<init>(AuthSSLProtocolSocketFactory.java:197)
        at client.Client.main(Client.java:24)
Java Result: 1


Спасибо за помощь! smile 
PM MAIL   Вверх
Alexandr87
Дата 18.10.2007, 05:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 6
Всего: 39



Цитата(olegrolik @  17.10.2007,  23:10 Найти цитируемый пост)
Используемая библиотека для ssl - not-yet-commons-ssl-0.3.8.jar

хм, а я вообще никакую отдельную библиотеку не использую.
У меня в 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 у меня вообще нет. Попробуйте убрать эту библиотеку.
PM Jabber   Вверх
olegrolik
Дата 18.10.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Огромное спасибо. Ключи найдены.  smile Буду настраивать.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.3366 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.