Jump to content
Froxlor Forum
  • 0

nginx+SSL per Domain liefert "falsches" Zertifikat


lets.byte.it

Question

Hallihallo liebes Forum,

 

ich muss nach einer langen Recherche aufgeben und mal nachfragen. Und zwar geht es konkret darum Froxlor Kunden-Domains mit SSL-Zertifikaten zu best?cken. Wie schon erw?hnt, habe ich mich umgehend umgeschaut und kam nicht wirklich zu einer L?sung des Problems durch Suchen und Ausprobieren.

 

Mal vorweg das Problem: nginx liefert dem Browser das SSL-Zertifikat, was unter "IP and Ports" hinterlegt wurde, also quasi sowas wie das "Server-Fallback-Zertifikat" statt dem SSL-Zertifikat, was der Kunde angelegt hat. Das ist so nat?rlich nicht praktikabel und daher kann da ja nur etwas nicht stimmen.

 

Zu den technischen Details:

  • Der Server ist ein Debian 3.2.65-1+deb7u2 x86_64
  • Es l?uft Froxlor 0.9.33.1-1
  • Es l?uft nginx 1.6.2 (SNI-Support) sowie php5-fpm PHP 5.4.36-0+deb7u3
  • Ich benutze aktuelle Browser mit SNI-Support
  • Die Kunden k?nnen erfolgreich als "virtuelle" UNIX User gemappt werden (also f?r PHP-Socket-Zugriff etc.)

 

Die nginx Vhost Dateien:

 

 

Wie ich das sehe, sieht das korrekt aus, oder? Das Problem ist nun, dass ich statt dem Kunden SSL Zertifikat das der IP bekomme, also das unter /pfad/zum/server/cert.crt.
 
 
Was ich schon gemacht habe:
  • s?mtliche Einstellungen der IP ge?ndert (alle Checkboxen mal durchprobiert), also diese Vhost-Container ja/nein, Servername ja/nein, ?
  • Domains gel?scht/neu hinzugef?gt
  • Zertifikate gel?scht/neu hinzugef?gt
  • Configs neu geschrieben
  • Services neu gestartet
 
Was sonst noch so passiert:
  • L?sche ich das der IP hinterlegte SSL-Zertifikat, sagt nginx bei einer Anfrage auf die SSL-Kunden-Domain, dass kein SSL-Zertifikat angegeben wurde
 
 
Vielleicht habe ich einige Daten, Fakten und Dinge, die ich schon probiert habe, vergessen zu erw?hnen. Fragt doch bitte, wenn was fehlt oder unklar ist.
?ber Denkanst??e w?re ich sehr dankbar, ich bin noch recht neu um Umgang mir Froxlor und wollte jetzt mal die SSL-Implementation testen? 
Ich gehe mal davon aus, dass mein Fehler recht trivial sein d?rfte.
Link to comment
Share on other sites

19 answers to this question

Recommended Posts

Hallo, wie sieht es mit dem ssl_trusted_certificate aus? Sollte froxlor das nicht auch in die vhost config bei nginx schreiben? 

der ganze Sinn an so einem System ist ja, dass man alles ?ber die WebUI configuriert. Wenn ich dann noch anfangen muss einzelne Sachen manuell zu erg?nzen (und cronjob patchen ist f?r mich manuell), an die ich mich beim n?chsten mal sicher nicht mal mehr erinnern werde, finde ich das etwas ?rgerlich

Link to comment
Share on other sites

Vielen Dank f?r das PDF, so ein nettes Support-Dokument hatte ich bisher nicht gefunden.

Aber ich habe nat?rlich alle Schritte auch ohne das PDF-Dokument bereits exakt so ausgef?hrt, bis auf diverse Versuche im IP-Vhost-Bereich ?nderungen zu machen, damit das richtige Zertifikat ausgeliefert wird.

 

Man kann also im Grunde sagen, dass meine Konfiguration nach dem PDF-Dokument korrekt ist.

Wo jetzt das kleine Detail versteckt ist, das f?r die Fehlauslieferung verantwortlich ist, kann ich dadurch aber auch nicht sagen.

Link to comment
Share on other sites

Die nginx-Logs sagen dazu "nichts". Das sind ganz normale Requests, es wird kein Eintrag in der error.log hinzugef?gt. 

Wenn ich das IPundPorts-Zertifikat l?sche, dann beschwert nginx sich, dass kein Zertifikat gefunden wurde. Aktuell habe ich da einfach aus Testgr?nden das Kundenzertifikat hinterlegt.

 

Das nginx error.log:

2015/03/21 12:33:35 [error] 18085#0: *32390 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: xx.xx.xx.xx, server: yy.yy.yy.yy:443
Link to comment
Share on other sites

Die nginx-Logs sagen dazu "nichts". Das sind ganz normale Requests, es wird kein Eintrag in der error.log hinzugef?gt.

Dann die Ausgabefreudigkeit erh?hen. Hierf?r im Kunden-Vhost die "error_log" Zeile anpassen. Das letzte Wort sollte statt "error" dann "debug" lauten.

- error_log /var/customers/logs/meinkunde-meinedomain.de-error.log error;
+ error_log /var/customers/logs/meinkunde-meinedomain.de-error.log debug;

Aufpassen, diese ?nderungen werden nat?rlich von Froxlors Cronjob, wenn er l?uft, wieder zur?ckgesetzt.

Link to comment
Share on other sites

Danke f?r die ausf?hrliche Antwort, das kann wirklich jeder verstehen und nachvollziehen, super!

 

Leider habe ich gelesen, dass nginx daf?r von Haus aus mit dem Debug-Flag kompiliert sein muss, was mein nginx scheinbar nicht ist, da sich die Logs dadurch nicht h?ufen/?ndern. Und das Neukompilieren auf einem Produktivsystem ist gerade etwas schlecht m?glich. 

 

Wenn nichts geht und ich Zeit finde, kann ich das gern mal machen. G?be es noch andere einflussnehmende Faktoren auf die Zertifikatauswahl? Weil es muss ja irgendwie Folgendes passieren: Anfrage -> Vhost zuordnen -> Bei richtigem Vhost wird richtiges Root-Verzeichnis angesprochen -> SSL-Zertifikat aus Vhost laden

Ich verstehe halt nicht, warum da der richtige Vhost f?r das Root-Verzeichnis ja angesprochen wird (weil es kommen ja die erwarteten Daten bei raus) aber das Zertifikat aus dem anderen Vhost genommen wird. Ist da eine Hierarchie dabei, wenn ja, wie genau funktioniert das?

 

Das ist nat?rlich mittlerer Weile wohl doch kein Froxlor-Problem mehr, anfangs dachte ich, es liegt an einer falschen Einstellung meiner Seits. Aber jetzt sieht mir das ja eher nach gescheiterter nginx Konfiguration aus.

Link to comment
Share on other sites

Neukompilieren m?sstest du ja nur, wenn du es manuell kompiliert hast, oder Gentoo verwendest...und selbst dann ist das doch auch auf Produktivsystemen m?glich, erst ein "make install" ?berschreibt doch ?berhaupt erst die Programmdateien und der laufende Dienst wird dadurch auch nicht beeinflusst (ist ja im RAM).

 

Benutzt du Debian o.?. gibt es doch sicher ein debug-paket von nginx.

 

Und nein, was f?r einflussnehmende Faktoren sollte es geben? nginx ordnet dem request den entsprechenden vhost zu, froxlor hat damit nix mehr zu tun...und auch die SSL einstellungen sollte er nat?rlich aus dem entsprechenden vhost-kontext nehmen.

 

Wie ist denn die Ausgabe von folgendem Befehl:

curl -v -s -k https://deine-ssl-seite.de
Link to comment
Share on other sites

Oh okay, alles klar. Ich hatte das nur hier gelesen und dann daraus gefolgert, dass deshalb keine Debug-Informationen im Log auftauchen.

 

Die Ausgabe dazu findet sich hier, bei gesetztem Kundenzertifikat als IPundPorts Zertifikat. Bei nicht gesetzten IPundPorts Zertifikat (aber weiterhin gesetztem Kundenzertifikat) sieht das Ganze so aus.

Link to comment
Share on other sites

die Ausgabe vom openssl sieht eigentlich korrekt aus. Das wird ein Clientproblem bei dir sein.

 

Allerdings kann dir das hier keiner best?tigen solange du nicht die eigentliche Domain mal postest damit das auch Dritte verifizieren k?nnen.

Link to comment
Share on other sites

Sephi hat recht, es scheint wohl ein Client-(Caching-)Problem zu sein. Dein Host api.kassencheck24.de (der steht ja nun mal im Zertifikat drin, welches du gepostet hast), funktioniert einwandfrei. Qualys SSL Test gibt dir ein A.

Link to comment
Share on other sites

Hehe, ja klar, ich dachte, es w?re nicht von Belangen, aber da hat ja schon jemand den Host aus dem Zertifikat extrahiert.

 

Das ist ein guter Hinweis mit dem Clientcaching, weil die Configs ja (nach 100 Mal kontrollieren) wirklich stimmen m?ssten. Aber?

Wenn ihr momentan den Host angesprochen habt, habt ihr aber das Kunden-Zertifikat aus der IPundPorts-Vhost-Datei ausgeliefert bekommen und nicht das Kundenzertifikat aus dem Kunden-Vhost. Und wenn ich das Zertifikat aus dem IPundPorts-Vhost wieder rausnehme, kann auch der SSl-Test keine sichere Verbindung zum Host aufbauen. Es kann also nicht am Clientcaching liegen.

 

Qualsy SSL Test:

Assessment failed: No secure protocols supported

nginx error.log:

[error] 18527#0: *9 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: xx.xx.xx.xx, server: xx.xx.xx.xx:443

Der Witz an der Sache ist ja, dass es mir ohne den SSL-Test ?berhaupt nie aufgefallen w?re, dass da was nicht stimmt. Ich habe n?mlich im Kunden-Vhost alle weiteren Einstellungen hinterlegt, die auf A+ Rating schlie?en m?ssten (OCSP Stapling, Diffie-Hellman, SSL-Session Caching, Public-Key Pinning, Strict-Transport-Security, ?). Die SSL-Einstellungen im Kunden-Vhost werden also ignoriert.

Link to comment
Share on other sites

naja, du kannst keinen ssl IP/port haben, ohne ein Zertifikat. Hinterlege dort einfach ein selbstsigniertes f?r *.dein-server.tld - und f?r den kunden hinterlegst du dann wie im PDF beschrieben das Zertifikat. Und ja, StartSSL Zertifikate sind kein Problem, die nutz ich bei mir auch f?r mehrere Domains.

Link to comment
Share on other sites

naja, du kannst keinen ssl IP/port haben, ohne ein Zertifikat. Hinterlege dort einfach ein selbstsigniertes f?r *.dein-server.tld - und f?r den kunden hinterlegst du dann wie im PDF beschrieben das Zertifikat. Und ja, StartSSL Zertifikate sind kein Problem, die nutz ich bei mir auch f?r mehrere Domains.

 

Wenn das so ist, habe ich das jetzt mal gemacht. Also ein Zertifikat selbst erstellt und im IPundPorts-Bereich hinterlegt. Er liefert jetzt aber trotzdem f?r die Kunden-SSL-Domain das selbst signierte Zertifikat aus, was darin resultiert, dass sich nat?rlich kein Browser mit der Kunden-SSL-Domain verbinden m?chte.

Also habe ich doch irgendwo eine Einstellung fehlerhaft gemacht? Ich habe jetzt noch mal im IPundPorts-Vhost die Checkboxen gesetzt wie das PDF es empfiehlt. 

 

Nebenfrage: Kann nginx die ssl_trusted_certificate-Direktive automatisch mit dem durch Froxlor optional angegebenen CertificateChainFile intern setzen? Alternativ m?sste man das ja dann als Administrator im Domain-Vhost manuell hinzuf?gen und manuell das entsprechende Chainfile auf den Server als Datei erstellen.

Link to comment
Share on other sites

Nebenfrage: Kann nginx die ssl_trusted_certificate-Direktive automatisch mit dem durch Froxlor optional angegebenen CertificateChainFile intern setzen? Alternativ m?sste man das ja dann als Administrator im Domain-Vhost manuell hinzuf?gen und manuell das entsprechende Chainfile auf den Server als Datei erstellen.

 

K?nnen tun wir das, aber aktuell ist es so nicht im code. Kannst du dir ja selbst in den Cronjob patchen, ist ja keine gro?e Sache. und NEIN, das ChainFile erstellst du bitte NICHT selbst wenn du das als Kunde in das Textfeld eingef?gt hast, macht das der Cronjob.

Link to comment
Share on other sites

K?nnen tun wir das, aber aktuell ist es so nicht im code. Kannst du dir ja selbst in den Cronjob patchen, ist ja keine gro?e Sache. und NEIN, das ChainFile erstellst du bitte NICHT selbst wenn du das als Kunde in das Textfeld eingef?gt hast, macht das der Cronjob.

 

Alles klar, es war nur die Frage, ob das theoretisch von Froxlor ?ber eine Einstellung geht, aber dann schau ich mal, wie ich das implementiere. Und der manuelle Weg ist nat?rlich NICHT der richtige Weg, wie Du richtig gesagt hast.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...