Manche Anforderungen werden in der Kombination zu Herausforderungen.
Folgendes Szenario: Windows-Rechner bei einem Kunden. Auf dem soll ein Java-Programm laufen (der Chatbot-Server, den ich gestern als Dienst verpackt habe), der E-Mails an einen internen SMTP-Server schickt. Weil dabei auch in der Regel personenbezogene Daten in den E-Mails stehen können, soll der Versand - obwohl intern - verschlüsselt laufen. Der interne SMTP-Server lauscht auf Port 25/tcp und schaltet per STARTTLS auf die verschlüsselte Verbindung um.
So weit, so gut.
Leider verweigert das Java-Programm die Verbindung mit einer javax.net.ssl.SSLHandshakeException. ... PKIX path building failed ... unable to find valid certification path to requested target.
Also kurz mal einen Blick auf das Zertifikat werfen...
Aber woher nehmen? Bei HTTPS ist es einfach: Man kann einen Browser auf den Server hetzen, der einem dann das Zertifikat anzeigen und, wenn gewünscht, sogar abspeichern lässt.
Für SMTP geht das so nicht. Leicht erschwerend kommt dazu, dass erst die Kommunikation aufgebaut und dann per STARTTLS die Verschlüsselung aktiviert werden muss, bevor der Server das Zertifikat überhaupt ins Spiel bringt.
Hatte ich schon erwähnt, dass es ein Windows-Rechner war?
Lösung: Linux installieren - zumindest ein ganz klein wenig davon: Cygwin! Und in Cygwin danach OpenSSL.
Die nächsten Schritte kommen vielen Linux-Administratoren vielleicht bekannt vor: