Page 1 of 1

Два SSL для двух доменов на одном IP

Posted: Wed Dec 10, 2014 10:13 am
by shpion4ik
Реально ли для VESTA подключить два SSL сертификата для двух доменов находящихся на одном IP?
Читал что можно сделать с помощью SNI. Какие идеи?

Re: Два SSL для двух доменов на одном IP

Posted: Wed Dec 10, 2014 12:47 pm
by rez0n
Да вообще в целом для nginx - это не проблема.
Vesta по моему пока так не может. Вся суть в том, что apache не умеет 2 virtualhost на одном IP с разными SSL сертификатами, а nginx умеет.

Соответственно, в идеале, все что нам нужно это - добавить в апаче обычный VirtualHost, а в nginx хост с SSL и правильным проксированием.
Я сделал немного сложнее и в обход панели.

1. Добавил в apache Listen с новым портом

Code: Select all

/etc/httpd/conf.d/82.196.1.21.conf
Listen 127.0.0.1:8443
2. В /home/admin/conf/web/shttpd.conf к уже существующему <ip>:8443 хосту (корневой домен со своим сертификатом) - добавил

Code: Select all

<VirtualHost 127.0.0.1:8443>

    ServerName cloud.quaded.com
    ServerAlias www.cloud.quaded.com
    ServerAdmin [email protected]
    DocumentRoot /home/admin/web/cloud.quaded.com/public_html
    ScriptAlias /cgi-bin/ /home/admin/web/cloud.quaded.com/cgi-bin/
    Alias /vstats/ /home/admin/web/cloud.quaded.com/stats/
    Alias /error/ /home/admin/web/cloud.quaded.com/document_errors/
    SuexecUserGroup admin admin
    CustomLog /var/log/httpd/domains/cloud.quaded.com.bytes bytes
    CustomLog /var/log/httpd/domains/cloud.quaded.com.log combined
    ErrorLog /var/log/httpd/domains/cloud.quaded.com.error.log
    <Directory /home/admin/web/cloud.quaded.com/public_html>
        AllowOverride All
        SSLRequireSSL
        Options +Includes -Indexes +ExecCGI
    </Directory>
    <Directory /home/admin/web/cloud.quaded.com/stats>
        AllowOverride All
    </Directory>
    SSLEngine on
    SSLVerifyClient none
    SSLCertificateFile /home/admin/conf/web/ssl.cloud.quaded.com.crt
    SSLCertificateKeyFile /home/admin/conf/web/ssl.cloud.quaded.com.key
    SSLCertificateChainFile /home/admin/conf/web/ssl.cloud.quaded.com.ca

    <IfModule mod_ruid2.c>
        RMode config
        RUidGid admin admin
        RGroups apache
    </IfModule>
    <IfModule itk.c>
        AssignUserID admin admin
    </IfModule>

    Include /home/admin/conf/web/shttpd.cloud.quaded.com.conf*

</VirtualHost>
3. В /home/admin/conf/web/snginx.conf добавил vhost с заданными ssl сертификатами и проксированием не стандартного <ip>:8443 apache vhosta, а новосозданного 127.0.0.1:8443

Code: Select all

server {
    listen	443;
    server_name cloud.quaded.com;
    ssl         on;
    ssl_certificate	 /home/admin/conf/web/ssl.cloud.quaded.com.pem;
    ssl_certificate_key  /home/admin/conf/web/ssl.cloud.quaded.com.key;
    error_log  /var/log/httpd/domains/cloud.quaded.com.error.log error;

    location / {
        proxy_pass	https://127.0.0.1:8443;
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|exe|pdf|doc|xls|ppt|txt|odt|ods|odp|odf|tar|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
            root           /home/admin/web/cloud.quaded.com/public_html;
            access_log     /var/log/httpd/domains/cloud.quaded.com.log combined;
            access_log     /var/log/httpd/domains/cloud.quaded.com.bytes bytes;
            expires        max;
            try_files	   $uri @fallback;
        }
    }

    location /error/ {
        alias   /home/admin/web/cloud.quaded.com/document_errors/;
    }

    location @fallback {
        proxy_pass	https://127.0.0.1:8443;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

}
Реализация довольно кривая и сложная, я создал и в apache - ssl хост, якобы на втором IP, и в nginx. Хотя в идеале - Vhost apache должен остаться на стандартном порту (без SSL), а nginx в силу своей мощи и умения держать на одном IP/порту несколько разных сертификатов будет распедаливать все.
Я думаю если немного поразкинуть мозгом - можно подкрутить стандартные templates конфигов апача и делать все это сразу через панель.

Re: Два SSL для двух доменов на одном IP

Posted: Wed Dec 10, 2014 3:19 pm
by shpion4ik
Спасибо огромное за столь развернутый ответ!

Re: Два SSL для двух доменов на одном IP

Posted: Fri Dec 12, 2014 7:07 am
by demian
то что индеец не может использовать два сертификата на одном порту это проблема модуля mod_ssl и openssl
обходится это легко, заменой модуля mod_ssl на mod_gnutls с соответствующей правкой конфига

http_ssl модуль nginx'а использует gnutls

Re: Два SSL для двух доменов на одном IP

Posted: Fri Dec 12, 2014 3:17 pm
by shpion4ik
Решилось все очень просто. Во второй домен всунул свежевыданные конфиги SSL. Выбрал Nginx Template FORCE-HTTPS и все заработало.

Установка SSL force:
Install custom nginx template

cd /usr/local/vesta/data/templates/web
wget http://c.vestacp.com/0.9.8/rhel/force-h ... inx.tar.gz
tar -xzvf nginx.tar.gz
rm -f nginx.tar.gz