BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 07 май 2024, 04:00

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка при проверке сертификата
СообщениеДобавлено: 22 июл 2013, 22:43 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
Да, таких тем уже было. Все перечитал, все перепробовал. Без результата.

Ситуация - Требуется настроить авторизацию по сертификату. Имеется настроенный https и соответствующий .keystore. От поставщика ОСМП получен CSR запрос. Делаю (это кратчайший путь):
1. Экспортирую сертификат сервера
Код:
# keytool -exportcert -keystore .keystore -alias bgbilling -outfile bgbilling.cert

2. Подписываю запрос своим секретным ключом (была тема как его достать с помощью java-кода, но в новой версии keytool есть способ проще)
Код:
# keytool -gencert -keystore .keystore -alias bgbilling -infile osmp.csr -outfile osmp.cert

Полученные сертификаты bgbilling.cert и osmp.cert отправляю в контору.

3. С сертификата osmp.cert делаю открытый ключ
Код:
# openssl x509 -inform der -in osmp.cert -pubkey -out osmp.pem > osmp.pub

В файле osmp.pub получается открытый ключ, который переношу в конфиг модуля mps (все строчки между «-----BEGIN PUBLIC KEY-----» и «-----END PUBLIC KEY-----» склеиваю в одну) (кстати, запросил в организации открытый ключ, он точно такой же, как и сгенерированный)
Код:
mps.1.cert=1
mps.1.pem=MIIBIjANBgkqhkiG9…… YwIDAQAB

В результате в логах ошибка:
Код:
MPSPaymentManager - MPSPaymentManager getInstance. Ошибка получения(сравнения) открытого ключа у клиентского сертификата службы платежей. Возможно в конфиге не указан открытый ключ
……дальше NullPointerException и дамп стэка……
MPSExecuter - MPSExecuter. Authentication error of payment system [remoteAddr=192.168.x.x, authType=null]. Клиентский открытый ключ не совпадает с необходимым

А можно где-то/как-то узнать какой он получил клиентский ключ и с чем он его сравнивает? Уровень логов уже поднял до DEBUG, но не помогло.

Кроме этого способа я пробовал сам генерировать секретный ключ, формировать запрос на подпись, ответ, пакет pkcs12, импортировать его в браузер и формировать запрос к mps. При запросе браузер запросил полученный сертификат, пароль... Но... Результат аналогичный.
Пробовал генерить новую пару ключей mps.key\pub специально для модуля mps и подписывать ими - не помогает. Импортирование полученных клиентских сертификатов в .keystore тоже ничего не даёт (да и, насколько я помню, Amir писал, что они берутся из конфига).

А ещё почему-то постоянно запрашивается пароль! В конфиге указано:
Код:
mps.comment=$CONTRACT ($COMMENT)
mps.1.mode=1
mps.1.title=ОСМП
mps.1.protocol=osmp
mps.1.protocol.ext=noBaseAuth
#mps.1.login=osmp
#mps.1.passw=osmp
mps.1.pid=5
mps.1.search.mode=contract
mps.1.numberPattern=\A\d{5}\z
mps.1.cert=1
mps.1.pem=MIIBIjANBgk…oYwIDAQAB

При этом при попытке проведения операции модуль требует логин и пароль. Комментарии на строчках mps.1.login и mps.1.passw никакого влияния не оказывают, всё равно запрашивается. А если закомментировать ещё и строчку «mps.1.protocol.ext», то пароль не запрашивается, но в логах исчезают ошибки «получения(сравнения) открытого ключа», на запросы в логах появляются ошибки java.lang.NullPointerException и модуль всё равно никак не отвечает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 июл 2013, 22:59 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
не коментируйте логин и пароль, просто оставте пустыми


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 июл 2013, 23:17 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
skn писал(а):
не коментируйте логин и пароль, просто оставте пустыми

А не
Код:
#Отключение Base-аутентификации
#mps.1.protocol.ext=noBaseAuth

?

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 11:12 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
skn писал(а):
не коментируйте логин и пароль, просто оставте пустыми

И так тоже пробовал... Логин не запрашивается только если закоментировать все три строки.
Код:
#mps.1.protocol.ext=
#mps.1.login=
#mps.1.passw=


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 12:41 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
а с реальной системой проверяли?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:01 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
skn писал(а):
а с реальной системой проверяли?

Да. Аналогично.
И реальной системе не понравилось, что запрашивается логин и пароль.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:03 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
a.lebedev писал(а):
skn писал(а):
не коментируйте логин и пароль, просто оставте пустыми

И так тоже пробовал... Логин не запрашивается только если закоментировать все три строки.
Код:
#mps.1.protocol.ext=
#mps.1.login=
#mps.1.passw=


не запрашивается потому что программа падает раньше... ;-)
логин и пароль запрашиваются всегда, но дальше не проверяются


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:11 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
skn писал(а):
a.lebedev писал(а):
skn писал(а):
не коментируйте логин и пароль, просто оставте пустыми

И так тоже пробовал... Логин не запрашивается только если закоментировать все три строки.
Код:
#mps.1.protocol.ext=
#mps.1.login=
#mps.1.passw=


не запрашивается потому что программа падает раньше... ;-)
логин и пароль запрашиваются всегда, но дальше не проверяются


Реальной системе не нравится, что запрашивается логин и пароль. Им без разницы, что он не проверяется, они не собираются его предъявлять.
Есть возможность отключить запрос логина и пароля?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:14 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
skn писал(а):
не запрашивается потому что программа падает раньше... ;-)


Вы бы хоть ошибку со стеком выложили чтоли на всякий случай


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:24 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
Это если строк mps.1.protocol.ext, mps.1.login, mps.1.passw нет.
Код:
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream - java.lang.NullPointerException
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.bean.MPSPaymentManager.processRequest(MPSPaymentManager.java:328)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.MPSExecuter.doPost(MPSExecuter.java:102)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.MPSExecuter.doGet(MPSExecuter.java:43)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:48)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at java.lang.Thread.run(Thread.java:662)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:41 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
a.lebedev писал(а):
Это если строк mps.1.protocol.ext, mps.1.login, mps.1.passw нет.
Код:
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream - java.lang.NullPointerException
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.bean.MPSPaymentManager.processRequest(MPSPaymentManager.java:328)
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.MPSExecuter.doPost(MPSExecuter.java:102)


Код:
if( system.protocol.isAuthBySign() || system.extNoBaseAuth
                       || (system.login.equals( userName ) && system.password.equals( userPswd )) )

упало так как не указан NoBaseAuth и не указаны логин и пароль

mps.1.protocol=osmp - этот протокол не поддерживает подписи сертификатом


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:50 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
То есть никакого способа заставить не запрашивать логин и пароль нет. Я правильно понял?

А как узнать почему сертификаты не совпали? Какой именно получен клиентский ключ и с чем именно он его сравнивает? У меня в эксплорере есть только один сертификат. И именно его открытый ключ указан в конфиге модуля. Как они могут не совпасть?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 13:54 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
skn писал(а):
mps.1.protocol=osmp - этот протокол не поддерживает подписи сертификатом

Ой! Да? Как так не поддерживает? А как же её все настраивают? А зачем тогда mps.1.cert=1?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 15:34 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
skn писал(а):
mps.1.protocol=osmp - этот протокол не поддерживает подписи сертификатом

Нет же! Когда с киви тестили - все работало так:
Код:
mps.2.mode=1
mps.2.title=QIWI
mps.2.protocol=osmp
mps.2.pid=6
mps.2.search.mode=contract
mps.2.cert=1
mps.2.cert.pem=potatoes+gonna+potate
mps.2.protocol.ext=noBaseAuth
mps.2.numberPattern=^foo\d{4}$|^bar\d{4}$


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 16:01 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
есть код
Код:
if( system.protocol.isAuthBySign() || system.extNoBaseAuth
                       || (system.login.equals( userName ) && system.password.equals( userPswd )) )


при установке

Код:
mps.1.protocol=osmp


system.protocol.isAuthBySign() будет false

дальше проверяется

Код:
mps.1.protocol.ext=noBaseAuth


если параметр не задан или в нем нет noBaseAuth

system.extNoBaseAuth будет false

если в конфиге не заданы параметры

Код:
mps.1.login=osmp
mps.1.passw=osmp


system.login
и system.password будут null и в результате

Код:
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream - java.lang.NullPointerException
07-23/10:19:27 ERROR ["http-bio-/0.0.0.0-8443"-exec-9] LoggingPrintStream -     at bitel.billing.server.mps.bean.MPSPaymentManager.processRequest(MPSPaymentManager.java:328)


а все потому что первые реализации протокола были без сертификатов в связи с чем
Код:
mps.1.protocol=osmp
не предусматривает авторизацию по ключу

параметр
Код:
mps.1.cert=1

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2013, 19:21 
Не в сети
Клиент

Зарегистрирован: 06 май 2013, 11:07
Сообщения: 25
Откуда: Тольятти
Карма: 0
Всё. Спасибо всем!
Итог - сам дурак, внимательнее надо быть. Неправильно обозвал параметр в котором прописан открытый ключ.
Сегодняшнее обновление здорово помогло разобраться в ситуации. И кстати, после сегодняшнего обновления браузер больше не запрашивает пароль при mps.1.protocol.ext=noBaseAuth. Вобщем ценное обновление.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.065s | 52 Queries | GZIP : On ]