Hallo,
Ich habe auf meinem Debian 8 System, nginx in der mainline v. 1.9.10 installiert.
Dazu verwende ich letsencrypt und erstelle meine "test" Zertifikate.
Dabei ist mir folgendes aufgefallen:
Szenario 1
Nginx läuft und ist für http anfragen konfiguriert.
root /var/www/htdocs/example;
}
Während des erstell Prozesses soll man ein dokument erstellen das erreichbar sein soll.
printf "%s" 3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg.uc40gpsoIIKilDkPs9SX6r2bqH2yH_MjbvpHwn2AFFo > /var/www/htdocs/example/.well-known/acme-challenge/3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg
bekomme ich folgende ausgabe mit
curl -i [url]http://example.com/.well-known/acme-challenge/3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg[/url]
Ausgabe:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 08 Feb 2016 00:22:19 GMT
Content-Type: text/plain
Content-Length: 87
Last-Modified: Mon, 08 Feb 2016 00:19:15 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "56b7df03-57"
Accept-Ranges: bytes
3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg.uc40gpsoIIKilDkPs9SX6r2bqH2yH_MjbvpHwn2AFFo
Alles anzeigen
Das Zertifikat ist aufrufbar und die Erstellung kann erfolgreich beendet werden.
Szenario 2 mit anderer Server config.
Weiterleitung auf https:// mit return 301 […]
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
root /var/www/htdocs/example;
index index.html;
[…]
}
Alles anzeigen
Als ausgabe von curl -i [url]http://example.com/.well-known/acme-challenge/3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg[/url] kommt nun:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 08 Feb 2016 15:44:36 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://example.com/.well-known/acme-challenge/3zDyfnJ9_-O0W5Z27HnjHVJ45rDFYKQk9fD8WiZmMLg
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
Alles anzeigen
Letsencrypt spuckt folgendes aus:
Unable to reach
http://christoph-neumann.org/.well-known/acme-challenge/8Cq8y_oiKfnn9kCtTqSZFDkq7DuF_MI9e9MvBwIRMO8: ("bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)",)
Self-verify of challenge failed.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-05-08. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Also wird es ja erstellt.
Wenn ich jetzt aber return 301 [url]https://example.com[/url]$request_uri; auskommentiere, kann das Zertifikat ohne Probleme erstellt werden.
Was mich noch mehr verwundert ist das verhalten von nginx im Browser. Sobald man http://example.com eingibt, wird automatisch auf https://example.com weitergeleitet. Obwohl die Weiterleitung ja auskommentiert ist?
Meine Frage ist also wie konfiguriere ich ngnix so, dass es keine Probleme mehr gibt?
Und muss man überhaupt Port 80 anfragen weiterleiten wenn nginx insofern Port 443 konfiguriert wurde den Anschein macht es selber weiter zuleiten?
Grüße
Chris