Да, таких тем уже было. Все перечитал, все перепробовал. Без результата.
Ситуация -
Требуется настроить авторизацию по сертификату. Имеется настроенный 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 и модуль всё равно никак не отвечает.