2015-03-29 5 views
0

Я пытаюсь аутентифицировать пользователей API с сертификатами X.509, и я получил его почти вместе. Единственная проблема заключается в том, как получить информацию о сертификате (особенно данных сертификата PEM) от Apache to Rails.Apache + Passenger + Rails и сертификаты клиента

Эти переменная ENV содержит то, что мне нужно:

ENV['SSL_CLIENT_CERT'] 

Но это, кажется, крепиться к первому запросу после нерестового процесса пассажирского и не сбрасывается при каждом запросе.

Ответы this thread автор Пассажира, кажется, подтверждает, что переменные ENV замерзают и не сбрасываются для каждого запроса.

Есть ли способ получить правильные данные сертификата из Apache в Rails?

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

+0

Может ли изменение данных 'PEM-cert 'с каждым запросом клиента? Я думаю, что он останется таким же, если не будет изменен на сервере. –

+0

Я говорю о клиентских сертификатах, которые идентифицируют клиента - то есть по определению ДОЛЖНЫ меняться с каждым другим клиентом. В настоящее время Rails видит всех клиентов как ** первый ** один для подключения. – Laas

ответ

0

До любой другой варианта не представляет себя, я все еще выбрал для трюка заголовка:

Убедитесь, mod_headers загружен, а затем в виртуальном конфе хозяевах:

# Ensure that client can not pass certificate header 
RequestHeader unset X-Api-Client-Cert 
# Require client cert for API 
<Location /api> 
    SSLVerifyClient require 
    SSLOptions +ExportCertData 
    # Now export CertData via header 
    RequestHeader set X-Api-Client-Cert "%{SSL_CLIENT_CERT}s" 
</Location> 

И затем, при использовании кода Rails:

cert_data = request.headers['X-Api-Client-Cert'] 

Это не имеет значения, что использовать в качестве имени заголовка вместо X-Api-Client-Cert. По общему признанию, security through obscurity не является реальной безопасностью, но я решил использовать собственное имя заголовка, чтобы свести к минимуму вероятность того, что этот заголовок столкнулся с чем-либо, что настоящий клиент отправил бы без намерения.

Смежные вопросы