SSL certificates issue
Igor Sysoev
is at rambler-co.ru
Tue Nov 20 00:05:34 MSK 2007
On Mon, Nov 19, 2007 at 02:48:27PM +0300, Driantsov Alexander wrote:
> Столкнулся с проблемой при нескольких vhost'ах и SSL. Possibly a bug.
>
> Описание:
>
> Nginx используется как reverse-proxy для HTTPS. Есть 2(3,5,10) виртуальных хостов. Для них есть wildcard ssl cert. В первод домене(скажем subdomain1.domain.com) подсоединяется wildcard ssl cert, но в subdomain2.domain.com необходимо подключить сертификат конкретно для определенного домена, т.к. этот домен, отзывается как на subdomain2.domain.com, так и на domain2.com. По какой-то причине Nginx использует один и тот же сертификат для обоих виртуальных хостов(тот что был подключен первым)
http://www.modssl.org/docs/2.8/ssl_faq.html#ToC47
> Конфигурация nginx:
>
> # /usr/local/nginx/sbin/nginx -V
> nginx version: nginx/0.5.33
> built by gcc 4.1.1 20070105 (Red Hat 4.1.1-52)
> configure arguments: --with-zlib=../zlib-1.2.3 --prefix=/usr/local/nginx --with-http_ssl_module
>
> Конфиги:
>
> /usr/local/nginx/conf/nginx.conf:
> --------------------------------------
> user root;
> worker_processes 6;
>
> pid logs/nginx.pid;
>
> events {
> worker_connections 1024;
> }
>
> http {
> include conf/mime.types;
> default_type application/octet-stream;
>
> include conf/http.conf;
> include conf/vhosts.conf;
> }
> --------------------------------------
> conf/http.conf:
> --------------------------------------
> sendfile on;
> gzip on;
> gzip_min_length 1100;
> gzip_buffers 4 8k;
> gzip_types text/plain;
> output_buffers 1 100k;
> postpone_output 10460;
>
> tcp_nopush on;
> tcp_nodelay on;
>
> keepalive_timeout 2250 120;
> client_header_timeout 3m;
> client_body_timeout 3m;
> send_timeout 3m;
> proxy_read_timeout 300;
> proxy_connect_timeout 300;
> proxy_send_timeout 300;
> client_header_buffer_size 1k;
> client_max_body_size 150M;
> large_client_header_buffers 4 4k;
> server_names_hash_bucket_size 64;
> --------------------------------------
> conf/vhosts.conf:
> --------------------------------------
> include vhosts/subdomain1.domain.com.conf;
> include vhosts/subdomain2.domain.com.conf;
> --------------------------------------
>
> В subdomain1.domain.com.conf'е задается SSL сертификат:
> --------------------------------------
> server {
> listen 443;
> server_name subdomain1.domain.com www.subdomain1.domain.com;
>
> ssl on;
> ssl_certificate certs/wildcard.crt;
> ssl_certificate_key certs/wildcard.key;
> ssl_session_timeout 5m;
>
> ssl_protocols SSLv2 SSLv3 TLSv1;
> ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
> ssl_prefer_server_ciphers on;
>
> location / {
> proxy_pass http://subdomain1.domain.com/ ;
> proxy_set_header X-Real-IP $remote_addr;
> }
>
> location ~* ^.+\.(jpg|jpeg|gif|css|js)$ {
> root /var/www/vhosts/sith-killer.x-shops.com/httpdocs;
> access_log off;
> expires 30d;
> }
> }
> --------------------------------------
> vhosts/subdomain2.domain.com.conf:
> --------------------------------------
> server {
> listen 443;
> server_name subdomain2.domain.com www.subdomain2.domain.com domain2.com www.domain2.com;
>
> ssl on;
> ssl_certificate certs/domain2.com.crt;
> ssl_certificate_key certs/domain2.com.key;
> ssl_client_certificate certs/domain2.com.ca;
> ssl_session_timeout 5m;
>
> ssl_protocols SSLv2 SSLv3 TLSv1;
> ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
> ssl_prefer_server_ciphers on;
>
> location / {
> proxy_pass http://domain2.com/ ;
> proxy_redirect off;
> proxy_set_header Host $host;
> proxy_set_header SSL YES;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> client_max_body_size 10m;
> client_body_buffer_size 128k;
> proxy_connect_timeout 90;
> proxy_send_timeout 90;
> proxy_read_timeout 90;
> proxy_buffer_size 4k;
> proxy_buffers 4 32k;
> proxy_busy_buffers_size 64k;
> proxy_temp_file_write_size 64k;
> }
>
> location ~* ^.+\.(jpg|jpeg|gif|css|js)$ {
> root /var/www/vhosts/domain2.com/httpdocs;
> access_log off;
> expires 30d;
> }
> }
> --------------------------------------
>
> Такое ощущение, что Nginx считывает переменную ssl_certificate только один раз, а все последующие разы игнорирует. Хотя в таком случае он должен был сказать что директива задана дважды.
>
> P.S: не обращайте внимание на:
>
> proxy_set_header SSL YES;
>
> сделано для того, чтобы в дальнейшем в Апаче определить то, что пользователь пришел с HTTPS через .htaccess, не прибегая к модификации кода. Всмысле вот так:
>
> RewriteEngine on
> RewriteCond %{HTTP:SSL} YES
> RewriteRule .* - [E=HTTPS:on,L]
>
> Всем спасибо.
>
> --
> Sincerely yours,
> Driantsov Alexander,
> Technical Support Engineer
>
> Qualiteam Software
> Glavpochtamt, p/o box 5152. [web site] http://www.x-cart.com/
> 432072 Ulyanovsk, Russia [ phone ] +7-(8422)-429037 (9:00-18:00 GMT +4)
>
>
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list