Я хочу общаться через сокеты, Android Server и Python Client. Сокеты нормально общаются без SSL, теперь мне нужно реализовать сокет https (SSL). Мое требование заключается в том, что всякий раз, когда сервер получает запрос клиента, он должен проверить, является ли клиент действительным или нет, а также одинаковым для клиента, как всякий раз, когда клиент подключается к серверу, он должен проверять, является ли он действительным сервером или нет, я хочу сделать его безопасным. Я хочу сделать это общение безопасным от злоумышленников. Теперь я не знаю, сколько сертификатов мне нужно, и кто запустит рукопожатие, как сервер или клиент. Я очень новичок в программировании сокетов. Пожалуйста, помогите мне:)
Я использую этот код для создания сокета SSL, я соединяю моего клиента с сервером с помощью сертификата, который я создал, ключ BKS, используемый в Android Server, затем выдает ошибку «соединение закрыто одноранговым узлом»
InputStream clientTruststoreIs = context.getResources().openRawResource(R.raw.sslkeystore);
KeyStore trustStore = null;
trustStore = KeyStore.getInstance("BKS");
trustStore.load(clientTruststoreIs, "sslsocket".toCharArray());
System.out.println("Loaded server certificates: " + trustStore.size());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());
tmf.init(trustStore);
kmf.init(trustStore,"sslsocket".toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
//SSLSocketFactory factory = sslContext.getSocketFactory();
SSLServerSocketFactory factory = sslContext.getServerSocketFactory();
serverSocket = (SSLServerSocket) factory.createServerSocket(this.listenPort);
//SSLServerSocket mServerSocket = (SSLServerSocket) socketFactory.createServerSocket(8080);
((SSLServerSocket)serverSocket).setEnabledProtocols(new String[]{"TLSv1.2"});
String[] supportedProtocols = ((SSLServerSocket)serverSocket).getSupportedProtocols();
String[] enProtocols = ((SSLServerSocket)serverSocket).getEnabledProtocols();
String[] supportedCiphers = ((SSLServerSocket)serverSocket).getSupportedCipherSuites();
String[] enCiphersuite=((SSLServerSocket)serverSocket).getEnabledCipherSuites();
Log.i("Supported Cipher Array:", Arrays.toString(enCiphersuite));
((SSLServerSocket)serverSocket).setEnabledCipherSuites(enCiphersuite);
socket = (SSLSocket) serverSocket.accept();
socket.startHandshake();
socket.addHandshakeCompletedListener(new HandshakeCompletedListener() {
public void handshakeCompleted(HandshakeCompletedEvent arg0) {
Log.i(TAG, "handshakeCompleted");
}
});
}