Apache - Multi SSL-Zertifikate, die sich gegenseitig stornieren

470
Phil Gibson

Ich habe auf einem unserer Server zwei SSL-Zertifikate, die für zwei Projekte ausgeführt werden. Eines davon ist ein Wildcard-SSL, das nur für diese Domäne ausgestellt wurde. Ich werde es als domain2.com bezeichnen . Bei domain1.com hat die andere Domäne die Domäne nur für eine Unterdomäne ausgegeben, die Server genannt wird .

Da domain2 Benutzern im Projekt die Erstellung von Subdomains ermöglicht, verfügt das VirtualHost-Setup folgendermaßen:

<VirtualHost *:443> <Directory /var/www/domain2> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> #There's a SSL redirection here - #stackexchange network detected it as a URL shortener, so removed from question SSLEngine on SSLCertificateFile /app/domain2/certs/domain2.com.pem SSLCertificateKeyFile /app/domain2/certs/domain2.com.key SSLCertificateChainFile "/app/domain2/certs/fullchain.pem" SSLCACertificatePath "/app/domain2/certs/" SSLCACertificateFile "/app/domain2/certs/cacert.pem" ServerAdmin webmaster@localhost DocumentRoot /var/www/domain2 ErrorLog $/error.log CustomLog $/access.log combined </VirtualHost> 

Dies funktioniert gut, jedoch funktioniert die servers.domain1.com- SSL nicht (die auf letsencrypt und domain2.com ausgegeben wird, wird mit AlphaSSL erstellt.)

<VirtualHost servers.domain1.com:443> <Directory /app/corporate/mediaserver/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> #There's a SSL redirection here - #stackexchange network detected it as a URL shortener, so removed from question SSLEngine on SSLCertificateFile /app/corporate/mediaserver/certs/[redacted] SSLCertificateKeyFile /app/corporate/mediaserver/certs/[redacted] SSLCACertificatePath /app/corporate/mediaserver/certs/[redacted] SSLCACertificateFile /app/corporate/mediaserver/certs/[redacted] ServerName servers.domain1.com ServerAdmin webmaster@localhost DocumentRoot /app/corporate/mediaserver/public ErrorLog $/error.log CustomLog $/access.log combined </VirtualHost> 

Wenn ich servers.domain1.com lade, wird versucht, das SSL von der Wildcard aus zu laden. Wenn ich jedoch <VirtualHost>to <VirtualHost domain1.com:443>und domain1.com lade, wird das SSL vom richtigen SSL geladen (servers.domain1.com virtualhost wird einfach ignoriert).

Servers.domain2.com wird geladen (tatsächliche tld ist .io)

1
Haben Sie für jede Domäne unterschiedliche IP-Adressen oder teilen sie sich alle eine einzige IP-Adresse? grawity vor 6 Jahren 0
Sie haben dieselbe IP-Adresse @ grawity Phil Gibson vor 6 Jahren 0
Nun, das ist dein Problem. grawity vor 6 Jahren 0

1 Antwort auf die Frage

1
grawity

Erstens: Der Parameter in <VirtualHost …>funktioniert nicht so. In „eine IP pro Domain“ Systemen ist es für Spezifizierungs gemeint, die IP - Adresse des Webservers wird binden (das heißt, welche Adresse er Verbindungen erhalten) für diesen virtuellen Host. Es ist nicht für die Auswahl des virtuellen Hosts basierend auf HTTP "Host:" oder TLS SNI vorgesehen.

Sie sagen jedoch in Kommentaren, dass Sie nur eine einzige IP-Adresse haben (Sie möchten also TLS-SNI verwenden). In diesem Fall sollten alle virtuellen Hostblöcke an dieselbe *Adresse gebunden werden, und der tatsächliche Domänenname sollte als angegeben werden ServerName.

Zweitens: In der Apache-Konfiguration gewinnt der erste übereinstimmende VirtualHost-Block. Wenn Sie ServerName über exakte Übereinstimmungen einen Platzhalter haben, wird dieser immer ausgewählt. Stellen Sie daher sicher, dass Ihre VirtualHosts richtig angeordnet sind.

# The specific subdomains go first...  <VirtualHost *:443> ServerName servers.domain1.com DocumentRoot /app/corporate/mediaserver/public SSLEngine on SSLCertificateFile /app/corporate/mediaserver/certs/fullchain.pem SSLCertificateKeyFile /app/corporate/mediaserver/certs/privkey.pem </VirtualHost>  # ...and the wildcard is last:  <VirtualHost *:443> ServerName domain1.com ServerAlias *.domain1.com DocumentRoot /var/www/domain2 SSLEngine on SSLCertificateFile /app/domain2/certs/fullchain.pem SSLCertificateKeyFile /app/domain2/certs/domain2.com.key </VirtualHost> 

(Die SSLCertificateChainFileEinstellung ist in Apache 2.4 veraltet. Die SSLCA*Einstellungen gelten für die Clientauthentifizierung. Wenn Sie diese Option nicht verwenden, benötigen Sie sie auch nicht.)