Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
05:03, 14 марта 2011

Изменение mod_ssl или примеры всяких странностей

Недавно по работе пришлось копаться в исходном коде modssl, модуле поддержки SSL для популярного веб-сервера Apache. Выяснились интересные вещи.

Для работы одной информационной системы было необходимо обеспечить пользовательскую аутентификацию в Apache по сертификатам, которые выдаются нашим Национальным удостоверяющим центром (НУЦ). Кроме того, для авторизации пользователей должна проводиться проверка наличия в сертификате определённого расширения, которое было специально назначено для работы в этой информационной системе.

Как выяснилось, механизма для проверки наличия расширения в modssl нет. Однако есть следующая конструкция для использования в качестве ограничения доступа:

 
  1. SSLRequire "строка" in OID("наш_oid")
 

То есть, нам предлагается проверить сертификат на наличие расширения, извлечь его содержимое и сравнить с указанной нами же строкой. Весьма странно.

Ну ладно, допустим наше расширение в сертификате мы нашли. Но чтобы извлечь его содержимое, OID и NID этого сертификата должны быть заранее известны библиотеке openssl (кто не верит, можете посмотреть код openssl и modssl). В противном случае, modssl проигнорирует это расширение. Всё это, кстати, вполне согласуется с RFC 3280, но что мешало встроить в modssl элементарную проверку наличия самого расширения, мне непонятно.

Более того, даже если содержимое расширения modssl всё-таки вытащит, то кто сказал, что это будет какая-то строка? Всё это делает используемый синтаксис применимым в настолько частных случаях, что непонятно, зачем было разработчикам огород городить.

Я нашёл выход в написании патча для modssl. Может, кому-то поможет.

UPD: писал сей перл 29 мая 2009, делаю repost для себя, чтобы не забыть. Если кто-то наблюдает за разработкой Апача и mod_ssl, может скажет что-то новое, я за ситуацией не слежу.

0
283
0