On Sat, Sep 05, 2009 at 04:17:32PM +0400, Igor Sysoev wrote:
> On Sat, Sep 05, 2009 at 01:36:22PM +0400, Бондарец Иван wrote:
>
> > Добрый день!
> > Есть стандартная схема:
> > Интернет -> nginx --> backend (Apache либо WebSphere)
> > nginx сейчас терминирует на себе ssl и проксирует на backend.
> > Возникла задачка аутентифицировать пользователей на некоторых разделах сайта
> > на backend'e при помощи сертификатов. Можно ли настроить nginx на такой
> > режим работы? В моем понимании, на backend'е нужно поднять ssl (с более
> > слабым ключом, например) и настроить авторизацию по сертификатам, это я
> > сделал:
> > SSLEngine on
> > SSLCipherSuite
> > ALL:!ADH:!DH:!EDH:!KRB5:!IDEA:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
> > SSLCertificateFile /etc/apache2/ssl.crt/apache.crt
> > SSLCertificateKeyFile /etc/apache2/ssl.key/apache.key
> > SSLProtocol +SSLv3 +TLSv1
> > SSLVerifyClient require
> > SSLCACertificateFile /path/to/ca.crt
> >
> > Далее в конфиге nginx пишу:
> > server {
> > listen 443;
> > server_name test1;
> > ssl on;
> > ssl_certificate /etc/apache2/ssl.crt/apache.crt;
> > ssl_certificate_key /etc/apache2/ssl.key/apache.key;
> >
> > ssl_session_timeout 5m;
> >
> > ssl_protocols SSLv2 SSLv3 TLSv1;
> > ssl_ciphers
> > ALL:!ADH:!DH:!EDH:!KRB5:!IDEA:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL;
> > ssl_prefer_server_ciphers on;
> > location / {
> > proxy_pass
https://1.2.3.4:443;
> > }
> >
> > }
> >
> > Проверяю аутентификацию при обращении непосредственно к backend'у - на
> > IE6,7,8 и Safari 4.0.2 работает, на FF 3.5.2, Opera 10, Chrome - не
> > работает, пишет что-то вроде этого:
> > SSL-узлу не удалось договориться о приемлемом наборе параметров
> > безопасности.
> > (Код ошибки: ssl_error_handshake_failure_alert)
> >
> > Пробую через nginx, соответственно тоже не работает, в логе nginx пишет:
> > [error] 14221#0: *106 SSL_do_handshake() failed (SSL: error:14094410:SSL
> > routines:SSL3_READ_BYTES:sslv3 alert handshake failure) while SSL
> > handshaking to upstream
> >
> > Как это поправить? И вообще реализуема ли задачка, описанная в начале? Т.е.
> > аутентификация пользователей именно на backend'е?
>
> В таком виде - нет, потому что nginx не передаёт клиентский сертификат
> в proxy_pass.