OpenSSL kann die Zertifikatskette einer URL auf Port 443 nicht verifizieren, kann aber alle Instanz-Ports verifizieren

OpenSSL kann die Zertifikatskette einer URL auf Port 443 nicht verifizieren, kann aber alle Instanz-Ports verifizieren

Ich hoffe, dass mir jemand helfen kann, denn ich bin ratlos. Mein Team hat Probleme mit fehlenden Zwischenzertifikaten in unseren Diensten. Ich wurde beauftragt, ein Skript zu schreiben, das alle URLs unserer stark frequentierten Dienste kontinuierlich einzeln testet, um zu überprüfen, ob die Zertifikatskette vollständig ist. Ich habe ein C#-Programm geschrieben, das OpenSSL ausführt und die Ausgabe analysiert. Hier ist der OpenSSL-Befehl, den ich für jede URL ausgeführt habe:

"openssl.exe s_client -showcerts -servername " + uri + " -verify_hostname " + uri + " -connect " + uri +":" + port

Oder

openssl.exe s_client -showcerts -servername www.euro-example-01.com -verify_hostname www.euro-example-01.com -connect www.euro-example-01.com:443

Der Port ist standardmäßig 443 und wird 99 % der Zeit verwendet. Wenn OpenSSL jemals zurückgeben würde “Verify return code: 21 (unable to verify the first certificate)”, wüsste ich, dass ein Zwischenzertifikat fehlt, und es würde eine Warnung ausgelöst. Darüber hinaus gibt OpenSSL die Kette aus, damit ich dies überprüfen kann. Dies funktionierte beim Testen mit Websites wie incomplete-chain.badssl.com.

Es läuft jetzt kontinuierlich in der Cloud und gibt gelegentlich Warnungen aus. Unser Servicetechniker überprüft jedoch häufig jeden Server der fehlerhaften URL über den Instanzport und wir finden0 Fälle, in denen es fehlschlägt. Wir verwenden Round-Robin-Lastausgleich. Müssen wir also nicht davon ausgehen, dass mindestens einer dieser einzelnen Server der Grund für den 443-Fehler ist? Die OpenSSL-Protokolle des :443-Fehlerfalls zeigen nur ein Zertifikat in der Kette und Websites wie SSLLabs haben auch ein fehlendes Zwischenzertifikat bestätigt.

Wenn unser Techniker die fehlerhaften Endpunkte neu starten würde, würde die vollständige Kette gefunden und die Warnungen wegen fehlender Zwischenprodukte würden verschwinden.

Das vielleicht Seltsamste daran ist, dass ich ein separates Skript eingerichtet habe, um nur 4 URLs zu testen, anstatt alle ~160 verschiedenen URLs. Gestern euro-example-01.com:443wurde es innerhalb von 30 Minuten 12 Mal getestet und scheiterte 6 Mal mit dem ursprünglichen Skript. In denselben 30 Minuten wurde das neue, kleinere Skript euro-example-01.com:44312 Mal getestet und alle 12 Mal bestanden. Es könnte sein, dass die beiden Skripte einfach auf unterschiedliche Server zugegriffen haben, aber mir kommt das verdächtig vor.

Wie gesagt, wir wissen nicht, warum das passiert. Ich habe unseren Servicetechniker den Load Balancer überprüfen lassen und er sagt, er funktioniert einwandfrei. Wir haben kein Muster gefunden, das die Tests zum Scheitern bringt. Hat jemand von Ihnen eine Idee, warum das passiert? Gibt es alternativ eine Möglichkeit herauszufinden, welcher Instanzport betroffen ist, wenn wir mit :443 testen? Möglicherweise müssen wir auf Tests mit Instanzports statt mit :443 umsteigen, aber unsere Instanzzahlen ändern sich regelmäßig und es gibt eine große Anzahl davon.

Vielen Dank im Voraus für Ihre Hilfe!

tl;dr: Der Port 443 unserer URL gibt kein Zwischenzertifikat zurück, aber wenn wir die einzelnen Server für die besagte URL überprüfen, wird immer ein Zwischenzertifikat gefunden.

verwandte Informationen