Как создать безопасное соединение SSL TCP между Android Server и Python Client? - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу общаться через сокеты, 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");
                                }
                            });
                        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...