SSL в java с сертификатом Let's Encrypt
Пытаюсь создать приложение на SSL сокетах с сертификатом Let's Encrypt.
Для начала с помощью OpenSSL преобразовал в PKCS12 такой командой:
pkcs12 -export -in cert/cert.pem -inkey cert/privkey.pem -out cert/keystore.p12 -name domain.ru -CAfile cert/fullchain.pem -caname root
Далее загрузил сертификат таким образом:
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream("keystore.p12"), "password".toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(ks);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("NewSunX509");
keyManagerFactory.init(ks, "password".toCharArray());
SSLContext sslcontext = SSLContext.getInstance("TLSv1.2");
sslcontext.init(keyManagerFactory.getKeyManagers(), null, null);
И создаю серверный сокет:
new Thread(() -> {
SSLServerSocketFactory factory = sslcontext.getServerSocketFactory();
try {
SSLServerSocket server = (SSLServerSocket) factory.createServerSocket(8080);
server.setNeedClientAuth(false);
server.setWantClientAuth(false);
server.setEnabledProtocols(new String[] {"TLSv1.2"});
server.setUseClientMode(false);
SSLSocket socket = (SSLSocket) server.accept();
socket.startHandshake();
} catch (IOException ex) {
ex.printStackTrace();
}
}).start();
Однако получаю такие ошибки: На сервере:
javax.net.ssl|ALL|0B|Thread-2|2021-08-01 16:44:00.083 MSK|X509Authentication.java:264|No X.509 cert selected for EC
javax.net.ssl|ALL|0B|Thread-2|2021-08-01 16:44:00.084 MSK|X509Authentication.java:264|No X.509 cert selected for EC
javax.net.ssl|FINE|0B|Thread-2|2021-08-01 16:44:00.996 MSK|Alert.java:238|Received alert message (
"Alert": {
"level" : "fatal",
"description": "certificate_unknown"
}
На клиенте:
javax.net.ssl|FINE|01|main|2021-08-01 16:44:00.246 MSK|SSLCipher.java:438|jdk.tls.keyLimits: entry = AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472
javax.net.ssl|SEVERE|01|main|2021-08-01 16:44:01.976 MSK|TransportContext.java:316|Fatal (CERTIFICATE_UNKNOWN): PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (
"throwable" : {
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Я пытался также преобразовывать в PKCS12 в JKS но и это не даёт результата. Почему так?