2017-07-04 6 views
0

Ich habe eine App geschrieben mit dem Spark Java-Framework, mit TLS aktiviert.Spark app nicht senden intermediate/chain certificates

See:

Service https = ignite() 
    .port(8443) 
    .secure(keystorePath, keystorePass, truststorePath, truststorePass); 

Dieser Port 443 über eine iptables-Regel bedient wird, die 443 bis 8443

Das Problem, das ich eingehende umleitet habe ist, dass bei der Verwendung des ssl-Labortest Qualys (https://www.ssllabs.com/ssltest/) Der Server stellt keine Zwischenzertifikate bereit, die in meinem Truststore konfiguriert wurden.

ähnliche Ergebnisse treten auf, wenn ich openssl s_client:

Verify return code: 21 (unable to verify the first certificate) 

Zusammen mit

depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com 
verify error:num=27:certificate not trusted 
verify return:1 
depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com 
verify error:num=21:unable to verify the first certificate 
verify return:1 

Von dem, was ich sagen kann, scheint es, dass der Server (Funken Java-Anwendung oder eingebettetes Jetty Ich nehme an) die Zwischenzertifikate für die Kettenvalidierung nicht anbietet.

Browser sehen die Website als sicher, aber ich glaube, das liegt daran, dass die Browser die erforderlichen Zwischenzertifikate selbst herunterladen.

Der Grund, dass dies ein Problem ist, ist, dass ich versuche, Stripe Zahlung Webhooks zu verwenden, und sie haben strenge Vorschriften in Bezug auf die TLS-Cert-Kette gültig sein.

Ich bin mir nicht sicher, wo ich anfangen soll herauszufinden, warum diese Zwischenberichte nicht von meiner App geliefert werden. Könnte jemand einen Rat geben?

Antwort

0

Ich habe mehr oder weniger das gleiche genaue Problem. Ich folgte den Anweisungen auf der Java Spark-Website (spärlich, dass sie sind) und bekomme nur einen Serverfehler für meine Bemühungen.

Ich habe ein Drittanbieterzertifikat in meine Keystore-Datei importiert. Ich habe den CSR extern für das Java-Keytool generiert.

Ich habe die Keystone-Datei auf dem Server verschoben, auf dem die "mydomain.com" existiert.

Ich habe den gleichen grundlegenden Code, um einen Test "secureHello" (gemäß ihrer Dokumentation) zu tun, übergibt den Pfad an die keystore.jks Datei als ersten Parameter und das Passwort als zweite.

ERGEBNIS: SERVERFEHLER.

Nicht sicher, was ich als nächstes versuchen kann. Klar, ich vermisse etwas.

4 Stunden schlagen meinen Kopf auf dem Schreibtisch so weit (heute) ...