Итак, я создаю клиент на Python и сервер на Java для обмена и передачи файлов и строк. Я думаю, что первое, что мне нужно было сделать (помимо подключения к серверу и клиенту), - это завершение SSL Handshake. Ниже мой клиентский код Python и код сервера Java, который я реализовал:Ошибки установления связи SSL с клиентом и сервером
Python код клиента
import socket
import ssl
import struct
import io
import threading
import optparse
import os
import sys
HOST = "localhost"
PORT = 777
ADDR = (HOST,PORT)
def sock_connection():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
time.sleep(1)
ssl_sock = ssl.wrap_socket(sock)
try:
time.sleep(1)
ssl_sock.connect(ADDR)
print('CONNECTED!')
except socket.error as e:
print('ERROR', e)
exit(1)
return ssl_sock
def main():
sock_connection()
main()
Java код сервера:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
public
class Server {
private static final int PORT = 777;
public
static
void
main(String[] arstring) {
try {
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(PORT);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Я обычно запустить сервер первым, который работает отлично, тогда я запускаю клиента, и я получаю следующую ошибку в терминале сервера:
javax.net.ssl.SSLHandshakeException: нет общих шифров
И следующее питона:
ERROR [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] SSLv3 оповещения недостаточность рукопожатия (_ssl.c: 645)
Любые и вся помощь будет высоко оценена.
Благодаря
Благодарим за помощь! А я вижу. Хорошо, поэтому мне нужно настроить сертификат, который должен использовать сервер, а затем как клиент подтвердит, что сертификат действителен? –
@ D.Crusaf: Да, вы должны установить сертификат. Если клиент принимает это или нет, зависит от того, кто выдал сертификат, и если клиент доверяет этому эмитенту. Объяснение того, как работает TLS и как проверка сертификата выполняется более подробно, действительно выходит за рамки этого вопроса. Я рекомендую прочитать [Как работает SSL/TLS?] (Http://security.stackexchange.com/questions/20803/how-does-ssl-tls-work). –
Большое спасибо! Я попытаюсь сделать сертификат для сервера. Спасибо за ссылку, очень ценю. –