Apache - certyfikaty Multi SSL unieważniają się nawzajem

1

Mam na jednym z naszych serwerów dwa certyfikaty SSL działające dla dwóch projektów, z których jeden to wieloznaczny protokół SSL wydawany tylko dla tej domeny, który zadzwonię domain2.com . domena1.com , druga domena ma domenę wydaną tylko jednej subdomenie, zwaną serwery .

Spowodowany domena2 pozwalając użytkownikom na tworzenie subdomen, ma konfigurację VirtualHost wyglądającą tak:

<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 ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

To działa dobrze, jednak servers.domain1.com SSL nie działa (wydawany na letsencrypt, domain2.com jest wydawany z AlphaSSL

<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 ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Kiedy ładuję server.domain1.com próbuje załadować SSL z symboli wieloznacznych, jednak jeśli ustawię <VirtualHost> do <VirtualHost domain1.com:443> i załaduj domenę 1.com ładuje SSL z poprawnego (wirtualny host server.domain1.com zostaje zignorowany).

Loading servers.domain2.com (actual tld is .io)

Phil Gibson
źródło
Czy masz różne adresy IP dla każdej domeny, czy wszystkie one mają jeden adres IP?
grawity
Dzielą ten sam adres IP @grawity
Phil Gibson
To twój problem.
grawity

Odpowiedzi:

1

Po pierwsze: parametr w <VirtualHost …> nie działa w ten sposób. W systemach „jeden adres IP na domenę” służy do określania, który adres IP będzie obsługiwany przez serwer WWW powiązać (czyli jaki adres otrzyma połączenia) dla tego wirtualnego hosta. To jest nie do wyboru hosta wirtualnego na podstawie hosta HTTP: lub TLS SNI.

Jednak w komentarzach mówisz, że masz tylko jeden adres IP (więc będziesz chciał użyć TLS SNI). W tym wypadku wszystko bloki hostów wirtualnych powinny wiązać się z tym samym * adres, a rzeczywista nazwa domeny powinna być określona jako ServerName.

Po drugie: w konfiguracji Apache wygrywa pierwszy pasujący blok VirtualHost. Jeśli masz symbol wieloznaczny ServerName powyżej dokładne mecze, zawsze będą wybierane. Więc upewnij się, że Twoje wirtualne hosty są uporządkowane poprawnie.

# 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>

(The SSLCertificateChainFile ustawienie jest przestarzałe w Apache 2.4. The SSLCA* ustawienia są dla klient uwierzytelnianie - jeśli tego nie używasz, również ich nie potrzebujesz.)

grawity
źródło