Проверка подлинности клиентского ssl сертификата

nejtr0n

Гуру форума
Регистрация
24 Янв 2014
Сообщения
129
Реакции
82
Всем приветы. Возникла проблема авторизации клиентских запросов. Никак не пойму, как это сделать.
Есть система оплаты заказов. Заказ уходит на апи банка. В ответ от банка приходит запрос к нам на определённую страницу.
Так вот, как понять, что запрос пришел от банка?
Банк предлагает проверять ssl сертификат от их запроса.
Но ведь без их закрытого ключа я никак его не проверю?
Или я что то недопонимаю?
 
Но ведь без их закрытого ключа я никак его не проверю?
А для этого и есть СА (или цепочки центров, т.к. паблик CA не выдает клиентские сертификаты напрямую), публичным ключом которого и проверяется подпись клиентского сертификата (если не на пальцах, цифровая подпись сертификата расшифровывается публичным ключом СА, выдавшим сертификат). С цепочкой проверяем подписи всей цепочки до корневого.
Дальше остается проверить, а не отозван ли выпущенный сертификат - CAC/CRL/OCSP, в данном случае последнего будет достаточно.
 
Спасибо за помощь. Тока не понятно как это все на nginx поднять. Я правильно понимаю, что в качестве приватного ключа нужно указывать публичный ключ CA ? И вопрос, где его взять? Не вручную же его прописывать (например, если банк сменит ssl подпись, то связь нарушится)
 
Причем тут nginx? Публичные ключи центров сертификации лежат в паблике на их сайтах, цепочку можно прочитать с сертификата, а проверку - поискать готовые примеры под свой язык.
 
Мне кажется правильнее авторизовывать запросы на стороне веб сервера. То есть если запрос пришёл с валидной подписью от банка, то прокидывать на бекенд, в противном случае 403.
 
Мне кажется правильнее авторизовывать запросы на стороне веб сервера. То есть если запрос пришёл с валидной подписью от банка, то прокидывать на бекенд, в противном случае 403.
В принципе, можно проверять $ssl_client_verify Для просмотра ссылки Войди или Зарегистрируйся
 
какой-то замороченный банк
а не проще сделать систему как у робокассы и прочих аггрегаторов? подписывают массив параметров хешем с секретным паролем?

или самое простое - принимать запросы только с определенных IP адресов. я не думаю что у вас там пачка банков и все они имеют толстые пулы IP адресов, с которых приходят запросы
 
Ну банк не одни. И это скорее не банк замороченный, а я чуть-чуть параноик... =) Вариант с хешем по мне тоже самый простой и удобный. Но банк этого не делает к сожалению.
 
что, просто отправляют массив данных в открытом виде и все?
что это за банк, можно узнать?
 
Как таковые данные в открытом виде не идут. Идёт ИД заказа в системе банка и статус заказа - оплачен, отменён и т.д. (То есть колбеки, навешанные на события в системе банка).
Мы же все равно потом ещё раз идём на апи банка, и проверям статус заказа сами. Это сделано для того, чтобы не по крону проверять не оплаченные заказы, а при входящем запросе от банка.
Для меня видится другой вектор атаки - зафлудить запросами скрипт колбека. В свою очередь он массово будет спамить в банк, что в свою очередь может вызвать бан от банка. По этому хотелось бы делать запросы в банк только на "валидные" колбеки от него. Да и так правильнее имхо...
 
Назад
Сверху