Назад | Перейти на главную страницу

Apache, Tomcat: как использовать несколько сертификатов SSL на одном сервере

Я работаю над нашим сервером Debian X64, который является конечной точкой для 5 доменных имен. Одно из доменных имен используется веб-проектом, работающим на веб-сервере Apache. В остальных 4 доменах отдельные веб-приложения работают на одном экземпляре Apache Tomcat. В настоящее время я использую mod_proxy для перенаправления запросов в соответствующие веб-приложения.

К сожалению, эта настройка становится бесполезной, как только появляется HTTPS. Я не могу установить один сертификат https, в котором есть все домены. Такой сертификат выдает LetsEncrypt.

После установки сертификата любой запрос будет перенаправлен только на один домен Tomcat. Сначала я не мог понять этого поведения, но после проверки сертификата я увидел, что домен, на который он перенаправлялся, был первым из нескольких доменов в сертификате. Я не знаю, почему URL-адрес не обрабатывается, но это текущее поведение. Я думал об использовании mod_jk вместо того mod_proxy для этой задачи, но не знаю, что мне нужно.

Я хотел бы знать, как я могу создать установку, в которой я могу установить отдельные сертификаты SSL для каждого домена. Вот базовый обзор текущей настройки:

Apache2 worker.properties:

 worker.list = worker_app1
worker.worker_app1.type = lb
worker.worker_app1.balance_workers = app1_instance1
worker.worker_app1.sticky_session = true
worker.worker_app1.sticky_session_force = false
worker.worker_app1.method = busyness

worker.app1_instance1.type = ajp13
worker.app1_instance1.host = 127.0.0.1
worker.app1_instance1.port = 8010
worker.app1_instance1.host = localhost
worker.app1_instance1.lbfactor = 1
worker.app1_instance1.socket_timeout = 40
worker.app1_instance1.socket_keepalive = true
worker.app1_instance1.reply_timeout = 30000

Сайты с поддержкой Apache / 000-по умолчанию:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.domain4.de.com
        ServerAlias domain4.de.com
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                 Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Listen 443
<VirtualHost *:443>
ServerName www.domain1.de
ServerAlias domain1.de
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.domain1.de/tool.crt
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain1.de/private.key
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#ErrorDocument 503 /maintenance.html
# ErrorDocument 404 /maintenance.html
# ErrorDocument 500 /maintenance.html

#ProxyPass /maintenance.html !
#ProxyPass / http://localhost:8080/
#ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain3.de
ServerAlias domain3.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#ErrorDocument 503 /maintenance.html
# ErrorDocument 404 /maintenance.html
# ErrorDocument 500 /maintenance.html

#ProxyPass /maintenance.html !
#ProxyPass / http://localhost:8080/
#ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>


<VirtualHost *:80>
ServerName www.domain3.de
ServerAlias domain3.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain2.de
ServerAlias domain2.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain5.de
ServerAlias domain5.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

Если потребуется какая-либо другая информация, пожалуйста, дайте мне знать. Спасибо за уделенное время.

редактировать

Я повторно развернул все веб-приложения для работы с https, указав в конфигурации Spring-security. И я попробовал конфигурацию ниже. обратите внимание, для каждого VirtualHost я также пробовал ProxyPass с localhost: 8080. В настоящее время загружается только приложение веб-сервера, больше ничего.

Я изменил 000-default следующим образом:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.domain4.de.com
        ServerAlias domain4.de.com
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                 Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Listen 443
<VirtualHost *:443>
ServerName www.domain1.de
ServerAlias domain1.de
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.domain1.de/tool.crt
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain1.de/private.key
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#ErrorDocument 503 /maintenance.html
# ErrorDocument 404 /maintenance.html
# ErrorDocument 500 /maintenance.html

#ProxyPass /maintenance.html !
#ProxyPass / http://localhost:8443/
#ProxyPassReverse / http://localhost:8443/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:443>
ServerName www.domain3.de
ServerAlias domain3.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#ErrorDocument 503 /maintenance.html
# ErrorDocument 404 /maintenance.html
# ErrorDocument 500 /maintenance.html

#ProxyPass /maintenance.html !
#ProxyPass / http://localhost:8443/
#ProxyPassReverse / http://localhost:8443/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>


<VirtualHost *:443>
ServerName www.domain3.de
ServerAlias domain3.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8443/
ProxyPassReverse / http://localhost:8443/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:443>
ServerName www.domain2.de
ServerAlias domain2.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8443/
ProxyPassReverse / http://localhost:8443/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

<VirtualHost *:443>
ServerName www.domain5.de
ServerAlias domain5.de
ProxyRequests off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ErrorDocument 503 /maintenance.html
 ErrorDocument 404 /maintenance.html
 ErrorDocument 500 /maintenance.html

ProxyPass /maintenance.html !

ProxyPass / http://localhost:8443/
ProxyPassReverse / http://localhost:8443/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>