Тут не в технике проблема. Проблема в людях.<br>Пример: разработчики (некий аутсорс) выпустили новый релиз веб-приложения, передали нашим тестировщикам. Тестировщики быстренько согласовали с админами тест-бекенда, залили апдейт, погоняли тесты, потом уже спокойненько согласовали план работ на внедрение в бой и в течение какого-то времени все это безобразие внедряется в бой, с балансировщиками, фронтендами, файерволами, айпиэсами  и т.п. <br>

Так вот, если мы внедрим аутентификацию на фронтенде и жестко всех заставим работать через него, то в цепочку согласований-настроек войдет еще одно подразделение, чего хотелось бы избежать. <br><br><div class="gmail_quote">

5 сентября 2009 г. 20:36 пользователь Sergey Shepelev <span dir="ltr">&lt;<a href="mailto:temotor@gmail.com">temotor@gmail.com</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Бекендом редиректите неавторизованных на фронтенд.<br>
<br>
2009/9/5 Бондарец Иван &lt;<a href="mailto:bondarets@gmail.com">bondarets@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Понятно, спасибо.<br>
&gt; Я тоже предлагал аутентифицировать на фронтэнде, но некоторые категории<br>
&gt; пользователей (админы, технологи, тестировщики-функциональщики, etc.)<br>
&gt; зачастую ходят напрямую на backend, вот их-то запросы тоже нужно шифровать и<br>
&gt; аутентифицировать (не все, а только обращения к приложениям с критичными с<br>
&gt; точки зрения ИБ данным). Видимо придется вносить акцесс-лист на backend&#39;е,<br>
&gt; чтобы кроме фронтэнда никто не мог запрашивать, а всех этих товарищей<br>
&gt; заставлять работать через фронтэнд. Но эта задачка может изрядно затянуться<br>
&gt; в реализации, это ж нарушение священной мантры &quot;работает - не трогай!&quot;,<br>
&gt; будет много несогласных. К тому же сопровождение фронтэндов и бакэндов -<br>
&gt; разные люди в разных отделах, т.е. при каждом изменении тетировщикам<br>
&gt; придется согласовывать работы еще и на фронтэндах до начала функционального<br>
&gt; тестирования, что однозначно внесет задержку в и так не быстрый процесс...<br>
&gt; Всё же хочу еще раз уточнить - моя задачка не реализуема в принципе или не<br>
&gt; реализуема средствами nginx? Может кому-то известны программы/железки,<br>
&gt; которые умеют выполнять такую задачку?<br>
&gt;<br>
&gt; 5 сентября 2009 г. 17:06 пользователь Igor Sysoev &lt;<a href="mailto:is@rambler-co.ru">is@rambler-co.ru</a>&gt;<br>
&gt; написал:<br>
&gt;&gt;<br>
&gt;&gt; On Sat, Sep 05, 2009 at 04:17:32PM +0400, Igor Sysoev wrote:<br>
&gt;&gt;<br>
&gt;&gt; &gt; On Sat, Sep 05, 2009 at 01:36:22PM +0400, Бондарец Иван wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &gt; Добрый день!<br>
&gt;&gt; &gt; &gt; Есть стандартная схема:<br>
&gt;&gt; &gt; &gt; Интернет -&gt; nginx --&gt; backend (Apache либо WebSphere)<br>
&gt;&gt; &gt; &gt; nginx сейчас терминирует на себе ssl и проксирует на backend.<br>
&gt;&gt; &gt; &gt; Возникла задачка аутентифицировать пользователей на некоторых разделах<br>
&gt;&gt; &gt; &gt; сайта<br>
&gt;&gt; &gt; &gt; на backend&#39;e при помощи сертификатов. Можно ли настроить nginx на<br>
&gt;&gt; &gt; &gt; такой<br>
&gt;&gt; &gt; &gt; режим работы? В моем понимании, на backend&#39;е нужно поднять ssl (с<br>
&gt;&gt; &gt; &gt; более<br>
&gt;&gt; &gt; &gt; слабым ключом, например) и настроить авторизацию по сертификатам, это<br>
&gt;&gt; &gt; &gt; я<br>
&gt;&gt; &gt; &gt; сделал:<br>
&gt;&gt; &gt; &gt; SSLEngine on<br>
&gt;&gt; &gt; &gt; SSLCipherSuite<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt; ALL:!ADH:!DH:!EDH:!KRB5:!IDEA:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br>
&gt;&gt; &gt; &gt; SSLCertificateFile /etc/apache2/ssl.crt/apache.crt<br>
&gt;&gt; &gt; &gt; SSLCertificateKeyFile /etc/apache2/ssl.key/apache.key<br>
&gt;&gt; &gt; &gt; SSLProtocol +SSLv3 +TLSv1<br>
&gt;&gt; &gt; &gt; SSLVerifyClient require<br>
&gt;&gt; &gt; &gt; SSLCACertificateFile /path/to/ca.crt<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt;  Далее в конфиге nginx пишу:<br>
&gt;&gt; &gt; &gt;     server {<br>
&gt;&gt; &gt; &gt;         listen       443;<br>
&gt;&gt; &gt; &gt;         server_name  test1;<br>
&gt;&gt; &gt; &gt;         ssl                  on;<br>
&gt;&gt; &gt; &gt;         ssl_certificate      /etc/apache2/ssl.crt/apache.crt;<br>
&gt;&gt; &gt; &gt;         ssl_certificate_key  /etc/apache2/ssl.key/apache.key;<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt;         ssl_session_timeout  5m;<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt;         ssl_protocols  SSLv2 SSLv3 TLSv1;<br>
&gt;&gt; &gt; &gt;         ssl_ciphers<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt; ALL:!ADH:!DH:!EDH:!KRB5:!IDEA:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL;<br>
&gt;&gt; &gt; &gt;         ssl_prefer_server_ciphers   on;<br>
&gt;&gt; &gt; &gt;         location / {<br>
&gt;&gt; &gt; &gt;         proxy_pass   <a href="https://1.2.3.4:443" target="_blank">https://1.2.3.4:443</a>;<br>
&gt;&gt; &gt; &gt;             }<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt;        }<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt; Проверяю аутентификацию при обращении непосредственно к backend&#39;у - на<br>
&gt;&gt; &gt; &gt; IE6,7,8 и Safari 4.0.2 работает, на FF 3.5.2, Opera 10, Chrome - не<br>
&gt;&gt; &gt; &gt; работает, пишет что-то вроде этого:<br>
&gt;&gt; &gt; &gt; SSL-узлу не удалось договориться о приемлемом наборе параметров<br>
&gt;&gt; &gt; &gt; безопасности.<br>
&gt;&gt; &gt; &gt; (Код ошибки: ssl_error_handshake_failure_alert)<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt; Пробую через nginx, соответственно тоже не работает, в логе nginx<br>
&gt;&gt; &gt; &gt; пишет:<br>
&gt;&gt; &gt; &gt; [error] 14221#0: *106 SSL_do_handshake() failed (SSL:<br>
&gt;&gt; &gt; &gt; error:14094410:SSL<br>
&gt;&gt; &gt; &gt; routines:SSL3_READ_BYTES:sslv3 alert handshake failure) while SSL<br>
&gt;&gt; &gt; &gt; handshaking to upstream<br>
&gt;&gt; &gt; &gt;<br>
&gt;&gt; &gt; &gt; Как это поправить? И вообще реализуема ли задачка, описанная в начале?<br>
&gt;&gt; &gt; &gt; Т.е.<br>
&gt;&gt; &gt; &gt; аутентификация пользователей именно на backend&#39;е?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; В таком виде - нет, потому что nginx не передаёт клиентский сертификат<br>
&gt;&gt; &gt; в proxy_pass.<br>
&gt;&gt;<br>
&gt;&gt; А кроме того, это технически невозможно, потому что, даже передав<br>
&gt;&gt; клиентский сертификат, nginx не сможет его подтвердить, не имея<br>
&gt;&gt; клиентского приватного ключа.<br>
&gt;&gt;<br>
&gt;&gt; &gt; Можно аутентифицировать на nginx&#39;е, а результат проверки<br>
&gt;&gt; &gt; и прочие ssl-параметры передавать бэкенду без https:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;    server {<br>
&gt;&gt; &gt;       ssl_verify_client   optional;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; <a href="http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html#ssl_verify_client" target="_blank">http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html#ssl_verify_client</a><br>
&gt;&gt; &gt; <a href="http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html#variables" target="_blank">http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html#variables</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Игорь Сысоев<br>
&gt;&gt; <a href="http://sysoev.ru" target="_blank">http://sysoev.ru</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>