Configuração ideal do Apache para vários certificados SSL com SNI em um único IP

1

Estou procurando a maneira mais eficiente de obter essa configuração no Apache 2.4.33 no Amazon Linux Distro:

  • uma única instância do servidor (aqui: AWS EC2)
  • um único IP associado

  • dois (ou mais) domínios, cada um com seu próprio certificado SSL

  • um VirtualHost SSL padrão que se aplica a todos os outros, para definir itens como SSLProtocol , FilesMatch e BrowserMatch apenas uma vez

  • um VirtualHost dedicado por domínio que aponta para os respectivos arquivos e define a raiz do documento

Há algo de errado com essa configuração?

1) /etc/httpd/conf.d/ssl.conf (arquivo inteiro):

Listen 443 https

SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300

SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin

SSLCryptoDevice builtin

# default settings for all VirtualHosts
<VirtualHost *:443>

LogLevel warn

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

SSLHonorCypherOrder o

#use OpenSSL default
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
#SSLProxyCipherSuite HIGH:MEDIUM:!aNULL:!MD5

<FilesMatch "\.(cgi|shtml|phtml|php)$">
  SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/var/www/cgi-bin">
  SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

2) /etc/httpd/cond.f/vhosts.conf

# foo.com

<VirtualHost *:80>
  ServerName foo.com
  ServerAlias www.foo.com
  Redirect 301 / https://foo.com
</VirtualHost>

<VirtualHost *:443>
  ServerName foo.com:443
  ServerAlias www.foo.com:443

  DocumentRoot "/var/www/foo"

  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/foo.crt
  SSLCertificateChainFile /etc/pki/tls/certs/foo.bundle
  SSLCertificateKeyFile /etc/pki/tls/private/foo.key

  ErrorLog logs/foo
  TransferLog logs/foo-acc
</VirtualHost>


# bar.com

<VirtualHost *:80>
  ServerName bar.com
  ServerAlias www.bar.com
  Redirect 301 / https://bar.com
</VirtualHost>

<VirtualHost *:443>
  ServerName bar.com:443
  ServerAlias www.bar.com:443

  DocumentRoot "/var/www/bar"

  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/bar.crt
  SSLCertificateChainFile /etc/pki/tls/certs/bar.bundle
  SSLCertificateKeyFile /etc/pki/tls/private/bar.key

  ErrorLog logs/bar
  TransferLog logs/bar-acc
</VirtualHost>

Isso funcionará ou terei que repetir a configuração padrão para cada domínio dedicado?

    
por bobsoap 27.07.2018 / 13:50

1 resposta

1

Eu descobri depois de alguns testes extensivos:

O VirtualHost genérico "master" em ssl.conf deve referenciar um Certificado, uma Cadeia e uma Chave, caso contrário não funcionará. Portanto, para maior clareza e para evitar escrever (e manter) linhas duplicadas em vhosts, talvez seja melhor mover esse vhost genérico para vhosts.conf , antes dos outros.

As regras especificadas aqui parecem ser herdadas corretamente pelos vhosts a seguir e não precisam ser repetidas.

    
por 27.07.2018 / 18:10