Как добавить SSL-сертификат в сокет-соединение? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть сервер, написанный на python3, и клиент на PHP. Мой клиент может связаться с сервером, но я хочу добавить SSL к этому соединению.

Почему эти два сценария ниже не могут общаться друг с другом?

server.py

#!/usr/bin/env python3

import ssl
import socket

ssl_context = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH)
ssl_context.load_verify_locations(capath='.')
sock = socket.socket()
sock = ssl_context.wrap_socket(sock)
sock.bind(('0.0.0.0', 9000))
sock.listen(5)

csock, address = sock.accept()
csock.send(b'Server is listening...')
while True:
    client_msg = csock.recv(256)
    if not client_msg:
        break
    print('Client said: {}'.format(client_msg))
csock.close()

sock.close()

client.php

<?php

$context = stream_context_create([
    'ssl' => [
        'local_cert' => 'test.crt'
    ]
]);

$sock = stream_socket_client(
    'ssl://localhost:9000',
    $errno, $errstr,
    30,
    STREAM_CLIENT_CONNECT,
    $context
);
fwrite($sock, 'hello from client');
fclose($sock);

test.key и test.crt генерация

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout test.key -out test.crt

Редактировать @ Syntonym - оригинальная ошибка:

  • client.php

    PHP Предупреждение: stream_socket_client (): невозможно установить файл закрытого ключа `test.crt 'в client.php в строке 19 Предупреждение PHP: stream_socket_client (): не удалось включить шифрование в client.php в строке 19 Предупреждение PHP: stream_socket_client (): невозможно подключиться к ssl: // localhost: 9000 (неизвестная ошибка) в client.php в строке 19

  • server.py

    self._sslobj.do_handshake () ssl.SSLEOFError: EOF произошел с нарушением протокола (_ssl.c: 645)

Редактировать @Deepti Ваш ответ подтолкнул эту проблему вперед. Я добавил:

...
'ssl' => [
    'local_cert' => 'test.crt',
    'local_pk' => 'test.key'
...

Теперь у меня есть ошибки:

  • server.py

    self._sslobj.do_handshake () ssl.SSLError: [SSL: NO_SHARED_CIPHER] нет общего шифра (_ssl.c: 645)

  • client.php

    PHP Предупреждение: stream_socket_client (): сбой операции SSL с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 14077410: подпрограммы SSL: SSL23_GET_SERVER_HELLO: сбой квитирования оповещения sslv3 в client.php в строке 15 Предупреждение PHP: stream_socket_client (): не удалось включить шифрование в client.php в строке 15 Предупреждение PHP: stream_socket_client (): невозможно подключиться к ssl: // localhost: 9000 (неизвестная ошибка) в client.php в строке 15 Предупреждение PHP: fwrite () ожидает, что параметр 1 будет ресурсом, логическое значение указано в client.php в строке 17 Предупреждение PHP: fclose () ожидает, что параметр 1 будет ресурсом, логическое значение указывается в client.php в строке 18

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...