A causa della natura di come funziona SSL, l'handshake SSL / TLS viene eseguito prima che il nome host previsto sia dato al server web. Ciò significa che il certificato (primo) predefinito viene utilizzato quando si tenta di accedere al sito, indipendentemente dal nome di dominio utilizzato.
Questo vale sia per Apache che per Nginx.
Dal Wiki di Apache :
As a rule, it is impossible to host more than one SSL virtual host on
the same IP address and port. This is because Apache needs to know the
name of the host in order to choose the correct certificate to setup
the encryption layer. But the name of the host being requested is
contained only in the HTTP request headers, which are part of the
encrypted content. It is therefore not available until after the
encryption is already negotiated. This means that the correct
certificate cannot be selected, and clients will receive certificate
mismatch warnings and be vulnerable to man-in-the-middle attacks.
Dalla documentazione di nginx :
With this configuration a browser receives the default server’s
certificate, i.e. www.example.com regardless of the requested server
name. This is caused by SSL protocol behaviour. The SSL connection is
established before the browser sends an HTTP request and nginx does
not know the name of the requested server. Therefore, it may only
offer the default server’s certificate.
Come puoi risolvere questo problema?
La soluzione più semplice è utilizzare indirizzi IP separati per ogni sito che desideri proteggere.
Se ciò non è possibile, potrebbe essere possibile risolvere il problema utilizzando Indicazione del nome del server (SNI, RFC 6066 ). Ciò consente a un browser di passare il nome di dominio al server durante l'handshake.
Sia Nginx che Apache supportano SNI. Puoi scoprire di più su nginx SNI nella documentazione .
Vale la pena notare che SNI può essere utilizzato solo per i nomi di dominio e non per gli indirizzi IP. Quando si configura il server Web è necessario adottare ulteriori precauzioni per risolvere il problema, pertanto qualsiasi richiesta relativa all'IP viene gestita correttamente.
Only domain names can be passed in SNI, however some browsers may
erroneously pass an IP address of the server as its name if a request
includes literal IP address. One should not rely on this.
Il Wiki di Apache ha ulteriori informazioni sull'implementazione di SNI . Ma anche la loro documentazione consiglia che questa soluzione non è perfetta.
Using name-based virtual hosts with SSL adds another layer of
complication. Without the SNI extension, it's not generally possible
(though a subset of virtual host might work). With SNI, it's necessary
to consider the configuration carefully to ensure security is
maintained.
Detto questo, puoi vedere come questa configurazione non è semplice come i normali host virtuali. Per trovare una soluzione al tuo problema, dovremmo conoscere maggiori dettagli sulla tua configurazione e il comportamento previsto quando viene inviata una richiesta solo IP.
Generalmente, per "bloccare" un dominio non configurato o una richiesta IP, devi configurarlo come sito predefinito e quindi visualizzare un errore, reindirizzare, uscire, ecc.