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).
źródło
Odpowiedzi:
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 jakoServerName
.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
SSLCertificateChainFile
ustawienie jest przestarzałe w Apache 2.4. TheSSLCA*
ustawienia są dla klient uwierzytelnianie - jeśli tego nie używasz, również ich nie potrzebujesz.)źródło