Как добавить сертификат сервера клиенту в Java / Android Studio - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь подключиться к SSL-серверу, установленному на Python, с телефона Android. Я сам подписал сертификат server.crt и хочу использовать этот сертификат в приложении Android.

Как мне это сделать на Java? В Python это можно сделать следующим образом:

sock = socket.socket(socket.AF_INET6)
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile = 'server.crt')
conn = context.wrap_socket(sock, server_hostname = HOST)
conn.connect((HOST, PORT))

Мой текущий код Java выглядит следующим образом:

SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) factory.createSocket(HOST, PORT);

Как я могу расширить это так, чтобы он использовал сертификат? Заранее спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018

Java по умолчанию использует файл cacerts, в котором хранятся доверенные центры сертификации. Это находится в jre / lib / security / cacerts. Вы можете просто добавить его туда. Кроме того, вы можете указать другое хранилище CA с помощью параметров криптографии Java.

Если вы хотите сделать это в коде, вы можете. Но это не совсем правильный способ сделать это IMO. Реализовать интерфейс X509TrustManager. Тогда как то так:

X509TrustManager[] arr = new YourX509TrustManager []{new YourTrustManager()};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), arr, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...