Я прочитал, что аутентификация на стороне клиента является необязательной, поэтому я пытаюсь подключиться к своему серверу SSL без аутентификации на стороне клиента.Когда я делаю это, я получаю следующую ошибку на сервере:
, in accept_connection
ssl_version=ssl.PROTOCOL_SSLv23
File "/usr/lib/python2.7/ssl.py", line 933, in wrap_socket
ciphers=ciphers)
File "/usr/lib/python2.7/ssl.py", line 601, in __init__
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake
self._sslobj.do_handshake()
SSLEOFError: EOF occurred in violation of protocol (_ssl.c:590)
Вот код работающего сервера и клиента, все работает нормально, когда я аутентифицируюсь на стороне клиента, но ошибка появляется, когда я комментируюиз этой строки.
Сервер (python):
def accept_connection(self, sock):
client, (addr, port) = sock.accept()
sslclient = ssl.wrap_socket(
client,
server_side=True,
certfile=self.ssl_cert_file,
keyfile=self.ssl_key_file,
ssl_version=ssl.PROTOCOL_SSLv23
)
Клиент (C #):
public bool Connect()
{
try
{
client = new TcpClient(this.ServerAddress, this.ServerPort);
sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateCert),
null
);
try
{
sslStream.AuthenticateAsClient(this.ServerAddress);
}
catch (AuthenticationException e)
{
sslStream = null;
client.Close();
client = null;
return false;
}
}
catch (Exception e)
{
return false;
}
return true;
}
Выше приведен рабочий код без ошибок.
Когда я закомментирую следующий код на клиенте:
//sslStream.AuthenticateAsClient(this.ServerAddress);
Вышеприведенная ошибка Python обнаруживается, и клиентское соединение не выдает никаких исключений и продолжает работать до своего первогочитать, а затем завершается неудачно с:
This operation is only allowed using a successfully authenticated context.
Как я могу выполнить эту работу, если я не звоню AuthenticateAsClient
?
Вот так я генерирую certfile и keyfile
openssl req -x509 -newkey rsa:1024 -keyout my.key -out my.crt -days 365 -nodes -subj "/C=US/ST=VA/L=Junk/O=None/OU=Junk/CN=example.local"
Python версии 2.
Возможно, я только что был дезинформирован о том, что вызов AuthenticateAsClient
является необязательным?