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