Jump to content
Froxlor Forum
  • 0
lets.byte.it

nginx+SSL per Domain liefert "falsches" Zertifikat

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.

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

Die Configs sahen aber korrekt aus. Steht ja alles richtig im vhost. Steht was in den logs?

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

und was sagt:

openssl s_client -connect deine-ssl-seite.de:443

Share this post


Link to post
Share on other sites
  • 0

Mit Kundenzertifikat im IPundPorts-Vhost, bitte hier klicken.

Ohne Kundenzertifikat im IPundPorts-Vhost (aber Kundenzertifikat im eigentlichen Vhost):

$ openssl s_client -connect deine-ssl-seite.de:443
CONNECTED(00000003)
write:errno=54

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

Bitte nicht so alte threads wieder aufleben lassen...ich hab keine lust alles vorherige zu lesen

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By nisamudeen97
      Hi,
      Our froxlor server is behiend NAT and it uses the local IP  192.168.73.40.  We have enabled letsencrypt module in froxlor and tried validating SSL for a domain in the server.  SSL generation is getting failed with 403 error.  See the debug log information.      Replaced domain name and main IP.    Can any one help me regarding the issue.
       
      [information] Updating Let's Encrypt certificates [information] Updating domain-name.com [information] Adding SAN entry: domain-name.com [information] Adding SAN entry: www.domain-name.com [information] letsencrypt-v2 Using 'https://acme-v02.api.letsencrypt.org' to generate certificate [information] letsencrypt-v2 Using existing account key [information] letsencrypt-v2 Starting certificate generation process for domains [information] letsencrypt-v2 Sending signed request to https://acme-v02.api.letsencrypt.org/acme/new-order [information] letsencrypt-v2 Requesting challenge for domain-name.com [information] letsencrypt-v2 Got challenge token for domain-name.com [information] letsencrypt-v2 Token for domain-name.com saved at /var/www/froxlor/.well-known/acme-challenge/vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k and should be available at http://domain-name.com/.well-known/acme-challenge/vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k [information] letsencrypt-v2 Sending request to challenge [information] letsencrypt-v2 Sending signed request to https://acme-v02.api.letsencrypt.org/acme/chall-v3/803008408/k46kFQ [information] letsencrypt-v2 Verification pending, sleeping 1s [information] letsencrypt-v2 Verification pending, sleeping 1s [error] Could not get Let's Encrypt certificate for domain-name.com: Verification ended with error: {"type":"http-01","status":"invalid","error":{"type":"urn:ietf:params:acme:error:unauthorized","detail":"Invalid response from http:\/\/domain-name.com\/.well-known\/acme-challenge\/vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k [212.224.xxx.xxx]: \"<!DOCTYPE html>\\n<html lang=\\\"en-CA\\\" class=\\\"html_stretched responsive av-preloader-active av-preloader-enabled av-default-lightbox\"","status":403},"url":"https:\/\/acme-v02.api.letsencrypt.org\/acme\/chall-v3\/803008408\/k46kFQ","token":"vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k","validationRecord":[{"url":"http:\/\/www.domain-name.com\/.well-known\/acme-challenge\/vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k","hostname":"www.domain-name.com","port":"80","addressesResolved":["212.224.xxx.xxx"],"addressUsed":"212.224.xxx.xxx"},{"url":"http:\/\/domain-name.com\/.well-known\/acme-challenge\/vkTyLi2ApfP9O9ou8GyDz6WQmB--HP4ULnU0fhjXI0k","hostname":"domain-name.com","port":"80","addressesResolved":["212.224.xxx.xxx"],"addressUsed":"212.224.xxx.xxx"}]} [information] Let's Encrypt certificates have been updated  
    • By Jason Szymanski
      Hallo,
       
      ich habe leider ein Problem mit Froxlor.
      Zu meiner Situation: Froxlor läuft auf der Subdomain web01.meinedomain.net
      Jetzt möchte ich die Domain aber auch noch weiter Nutzen und habe mich daher als Kunde angelegt und die Domain meineDomain.net als Domain hinzugefügt.
      Dort kann ich auch weitere Subdomains hinzufügen. Das scheint soweit auch zu klappen ich sehe das er VHosts anlegt und auch die Verzeichnisse im FTP anlegt.
      Wenn ich jetzt allerdings versuche auf meinedomain.net oder eine andere Subdomain unter dieser Domain zuzugreifen leitet er mich auf web01.meinedomain.net
      Ich habe mich schon in den Einstellungen umgeschaut konnte aber keine entsprechende Einstellung finden an der das liegen könnte.
      Wie verhindere ich also das er mich auf Froxlor umleitet?
       
      Mit Freundlichen Grüßen
      Jason Szymanski
    • By peterpan
      Hi,
      I have a domain equipped with a certificate from LE. The cert is valid another 2 months. Now I added a domain as an alias of the existing domain, but the certificate isn't updated to have the new domain as its SAN.
      How do I trigger getting a new and updated certificate? Should I delete the existing one?
      Thanks for helping out.
       
      Peter
    • By Schutzgeist
      Hallo, 
      vielleicht kann mir jemand hier ja einen kleinen Tipp geben.
      Es ist mehr eine nginx-Konfiguration. 
      PHP-404-Rückmeldungen sollen "sauber" an Joomla übergeben werden.
       
      Mein 'Froxlor-Standardvhost sieht wie folgt aus

      Allerdings kann ich über das Joomla eigene REDIRECT Modul keine .php - Erweiterungen intern umleiten. 
      Anstatt  die joomla-eigene 404 Seite zu erhalten, bekomme ich die von nginx, da  die Abfrage hier als erstes ausgeführt wird. 
      Also habe ich meine vhost stümperhaft umgeschrieben, s.d. ein Teil seinen Soll erfüllt. 

      Teilweise kann ich nun die Redirects über Joomla verwalten lassen, aber oft erhalte ich LOOPs, da ich ja immer auf die index.php verweise. 
      So, warum nutze ich nicht die nginx-Weiterleitungen ? 

      Ich nutze ein Multi-Sitemodul  sowie ein Modul, um eine php-Endung  zu simulieren. 
      Beide haben mit meiner und der Standardvhost-Konfiguration leichte Schwierigkeiten. 

       
      Welche Vhost-Anpassungen nutzt ihr bei Eurer Joomla-Webseite ? 
      Der Fehler sitzt vermutlich 30 cm vor meinem Bildschirm. 
      Innerhalb meiner letzten 30 Versuche habe ich wohl  oft alte Cache-Webseiten geladen und ggf. die richtige Konfig übersehen.
       

       
       
       
       
       
    • By juca
      Hi,
      I was wondering if it possible to specify different custom configurations for HTTP and HTTPS traffic. 
      I have a couple of sites that would need to keep HTTP traffic active. Basically what I would like to do is the following:
      for HTTP:
      ProxyPreserveHost On ProxyRequests off ### HTTP Proxy AllowCONNECT 443 563 ProxyPass / http://localhost:16080/ ProxyPassReverse / http://localhost:16080/  
      for HTTPS:
      ###SSL Proxy ProxyPreserveHost On ProxyRequests off SSLProxyEngine on SSLProxyVerify none  SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off ProxyPass / https://localhost:16443/ ProxyPassReverse / https://localhost:16433/ is this possible?
       
×
×
  • Create New...