Я пытаюсь подключиться к серверу ssl с помощью Java. Я уже успел это сделать в Python, однако у меня есть файл PEM
, который не поддерживается Java. Преобразование его в PKCS12
не работаетОткрытие SSL-сокета с использованием сертификата pem
Ошибка при попытке подключения был:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Мой вопрос: Можете ли вы дать мне эквивалент Java? (Использование другой библиотеки также в порядке)
import ssl
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysslsock = ssl.wrap_socket(mysock, keyfile='mykey.pem', certfile='mycert.pem')
mysslsock.connect(("SOMEHOST", XXXXX))
Обратите внимание, что сервер требует аутентификации клиента.
Редактировать
Вот что я сделал в Java:
я использовал OpenSSL конвертировать мой сертификат в формате PKCS12:
openssl pkcs12 -export -out mystore.p12 -inkey mykey.pem -in mycert.pem
Тогда я использовал Keytool, который поставляется с JDK, чтобы преобразовать его в JKS:
keytool -importkeystore -destkeystore mystore.jks -srcstoretype PKCS12 -srckeystore mystore.p12
И это мой Java-код:
System.setProperty("javax.net.ssl.keyStore", "mystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) socketFactory.createSocket(HOST, PORT);
socket.startHandshake(); // That's the line I get the exception
socket.close();
Я уверен, что я делаю некоторые действительно глупые ошибки, как у меня нет никакого опыта работы с SSL.
Edit: Вероятно, я так или иначе неправильные сертификаты, так это то, что они выглядят как:
<mykey.pem>
-----BEGIN RSA PRIVATE KEY-----
ljnoabndibnwzb12387uGJBEIUQWBIDAB
....... (Some more lines)
-----END RSA PRIVATE KEY-----
<mycert.pem>
Bag Attributes
localKeyId: XX XX XX XX
subject:...
issuer:...
-----BEGIN CERTIFICATE-----
LAinaw8921hnA.......
.....
-----END CERTIFICATE-----
Включите ваш код Java в вопрос pls. –