如何将SSL证书添加到套接字连接?

时间:2018-04-30 10:39:00

标签: php python ssl openssl ssl-certificate

我用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 generation

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

修改 @syntonym - 原始错误是:

  • client.php

    PHP警告:stream_socket_client():无法设置私钥文件`test.crt&#39;在第19行的client.php中 PHP警告:stream_socket_client():无法在第19行的client.php中启用加密 PHP警告:stream_socket_client():无法连接到第19行client.php中的ssl:// localhost:9000(未知错误)

  • 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:第15行client.php中的sslv3警报握手失败 PHP警告:stream_socket_client():无法在第15行的client.php中启用加密 PHP警告:stream_socket_client():无法连接到第15行的client.php中的ssl:// localhost:9000(未知错误) PHP警告:fwrite()期望参数1是资源,在第17行的client.php中给出布尔值 PHP警告:fclose()期望参数1是资源,第18行的client.php中给出的布尔值

0 个答案:

没有答案