fragen stichworte

Ist es möglich, ein Wildcard-Zertifikat zu erhalten und SNI zu verwenden?

Ich möchte das Einrichten neuer Subdomains (zumindest für die Entwicklungsseite) vereinfachen und ein Wildcard-Zertifikat erhalten, ein Wildcard-DNS einrichten (was erledigt wird und gut funktioniert) und SNI (Server Name Indication) einrichten. Es scheint, als würde es für unsere HTTPS-Tests funktionieren, aber ich habe keine guten Anweisungen gefunden. Ist das überhaupt möglich? Alles, was ich über SNI gelesen habe, besagt, dass Sie ein Zertifikat für jede Site einrichten müssen und dass SNI es nur möglich macht, ein anderes Zertifikat bereitzustellen, abhängig vom Hostnamen.

antworten

Wenn Sie ein Platzhalterzertifikat haben, können Sie virtuelle Namen mit Namen verwenden Hosting wie Sie es auch ohne SSL tun.

Bei der Aushandlung einer SSL-Verbindung muss Ihr Webserver eine auswählen Zertifikat, bevor alle HTTP-Protokoll-Header empfangen wurden - Das bedeutet, dass Apache ohne SNI nicht zwischen mehreren auswählen kann namenbasierte virtuelle Hosts. Deshalb brauchten Sie in der Vergangenheit eine separate IP-Adresse für jeden auf Ihrem System gehosteten virtuellen Host. Mit SNI kann der Client dem Server den Namen von geben der Host, zu dem er eine Verbindung herstellen möchte. Dadurch kann der Server Wählen Sie die entsprechende Konfiguration des virtuellen Hosts und damit die entsprechendes Zertifikat.

Wenn Sie ein Wildcard-Zertifikat verwenden, umgehen Sie dieses Problem mit solange alle virtuellen Hosts eine gemeinsame übergeordnete Domäne verwenden. In diesem Fall ist SNI nicht erforderlich. Da das Zertifikat für any Ihrer Hosts gültig ist, gibt es keine Voraussetzung, dass Ihr Webserver in der Lage ist, das entsprechende zu identifizieren virtueller Host am Anfang der SSL-Verhandlung ... was Sie bedeutet kann die HTTP-Header verwenden, um den Host zu identifizieren, und mit normal fortfahren namenbasiertes virtuelles Hosting.

Wenn Sie Apache verwenden, sieht Ihre Konfiguration etwa wie folgt aus:

NameVirtualHost *:443

<VirtualHost *:443>
    ServerName foo.example.com
    DocumentRoot/sites/foo.example.com/html
    SSLEngine On
    # ...other SSL parameters...
</VirtualHost>

<VirtualHost *:443>
    ServerName bar.example.com
    DocumentRoot/sites/bar.example.com/html
    SSLEngine On
    # ...other SSL parameters...
</VirtualHost>

Wir führen diese Konfiguration seit einigen Jahren problemlos in einer Produktionssituation durch.