
Mein Server funktionierte einwandfrei mit einem selbstsignierten SSL-Zertifikat, bis ich die folgenden Zeilen hinzugefügt habe, um die Anfrage mit dem Inhalt wwww
an non-www
die Site umzuleiten:
<VirtualHost *:443>
ServerName www.mydomain.com
Redirect permanent / https://mydomain.com/
</VirtualHost>
Der Fehler, den ich erhalten habe, ist:
Der Server sollte SSL-fähig sein, hat aber kein Zertifikat konfiguriert [Hinweis: SSLCertificateFile] ((null):0)
Ich dachte, für eine einfache Umleitung wäre kein SSL erforderlich. Was muss getan werden, damit diese einfache Umleitung funktioniert?
Antwort1
Das Problem besteht darin, dass Sie bei Verwendung von SSL nicht mehrere NameVirtualHosts haben können. Dies ist ein häufiges Problem bei vielen verschiedenen Webservern.
Der Grund liegt in den Netzwerkschichten. HTTP liegt SSL über, das heißt, dass zuerst die SSL-Verbindung hergestellt und dann die HTTP-Anforderung gesendet werden muss. Die HTTP-Anforderung entscheidet jedoch, welcher NameVirtualHost diese Anforderung verarbeiten muss. Gleichzeitig können SSL-Zertifikate spezifisch für NameVirtualHosts sein. Wie kann also die SSL-Verbindung hergestellt werden, wenn der NameVirtualHost, der diese Anforderung verarbeiten soll, zum Zeitpunkt des SSL-Handshakes noch nicht bekannt ist?
Es gibt mehrere Leute, die über dieses Problem sprechen und Workarounds vorschlagen. Beispielsweise könnte man die verschiedenen virtuellen Hosts auf unterschiedliche IPs oder Ports setzen. Das würde das Problem lösen, da die IPs und Ports bekannt sind, bevor die SSL-Verbindung hergestellt werden muss:
Darüber hinaus fehlen Ihrem VirtualHost die SSL-bezogenen Anweisungen wie SSLEngine on
und die anderen SSL*
Anweisungen. Ich denke, das ist wahrscheinlich der Grund, warum Sie diesen Fehler erhalten, weil Sie einen VirtualHost ohne SSL so konfiguriert haben, dass er auf Port 443 lauscht, während ein anderer VirtualHost auf Port 443 SSL aktiviert hat. Aus dem oben beschriebenen Grund kann das nicht funktionieren.