web-dev-qa-db-ja.com

単一のIPでSNIを使用する複数のSSL証明書用のApacheの理想的なセットアップ

Amazon LinuxDistroのApache2.4.33でこのセットアップを実現するための最も効率的な方法を探しています。

  • 単一のサーバーインスタンス(ここでは:AWS EC2)
  • 単一の関連IP

  • それぞれが独自のSSL証明書を持つ2つ(またはそれ以上)のドメイン

  • SSLProtocolFilesMatchBrowserMatchなどを1回だけ設定するために他のすべてに適用される1つのデフォルトSSLVirtualHost

  • それぞれのファイルを指し、ドキュメントルートを設定するドメインごとの専用VirtualHost

この設定に何か問題がありますか?

1)/etc/httpd/conf.d/ssl.conf(ファイル全体):

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>

これは機能しますか、それとも専用ドメインごとにデフォルトのセットアップを繰り返す必要がありますか?

2
bobsoap

私はいくつかの広範なテストの後にそれを理解しました:

ssl.conf必須の一般的な「マスター」VirtualHostは、証明書、チェーン、およびキーを参照します。そうでない場合、機能しません。したがって、明確にし、vhost間で重複する行を書き込む(および維持する)ことを避けるために、この汎用vhostを他のvhostよりも先にvhosts.confに移動するのが最善の場合があります。

そこで指定されたルールは、次のvhostによって適切に継承されているようであり、繰り返す必要はありません。

1
bobsoap