Hallo, ich habe kürzlich einen Server mit einem selbstsignierten Zertifikat eingerichtet und kann es einfach nicht zum Laufen von Java bringen. Mein Prozess war es, ein Ca pem und ein Schlüsselpem zu erstellen und sie für TLS zu verwenden. Damit habe ich Mongo Compass in der Lage, eine Verbindung herzustellen, sowie ein grundlegendes Python -Programm. Wenn ich versuche, dasselbe in Java zu tun, erhalte ich diesen Fehler ständig: < /p>
Code: Select all
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
< /code>
Da es Java ist, musste ich auch das zusätzliche TLS -Material am Ende des URI entfernen und Vertrauens- und Schlüsselgeschäfte verwenden, um es zum Laufen zu bringen, aber es funktionierte nie. Unten ist mein Code: < /p>
System.setProperty("javax.net.ssl.trustStore","C:/Program Files/Java/jdk-21/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
System.setProperty("javax.net.ssl.keyStore", "C:/Program Files/Java/jdk-21/lib/security/mongodb.pkcs12");
System.setProperty("javax.net.ssl.keyStorePassword","changeit");
System.out.println(System.getProperties());
String connectionString = "?tls=true";
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(connectionString))
.applyToSslSettings(builder -> {
builder.enabled(true);
builder.invalidHostNameAllowed(true);
})
.build();
MongoClient client = MongoClients.create(settings);
< /code>
Um zu versuchen, den Trust Store einzurichten, rannte ich:
keytool -import -trustcacerts -file mongodbca.pem -keystore cacerts -storepass "changeit"< /code>
Und für den Schlüsselspeicher habe ich einfach meine PEM -Datei in eine PKCS12 -Datei mit OpenSSL mit Folgendes geändert:
openssl pkcs12 -export -out mongodb.pkcs12 -in mongodbkey.pem