我想在用python 3编写的客户机和服务器之间启动一个简单的SSL连接,但是我遇到了错误。
以下是服务器代码:

#/usr/bin/python3
import socket
import ssl

HOST, PORT = '0.0.0.0', 12345

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(10)
client, addr = sock.accept()

# WRAP SOCKET
wrappedSocket = ssl.wrap_socket(client, server_side=True, ssl_version=ssl.PROTOCOL_SSLv23, ciphers="ADH-AES256-SHA")

# CONNECT AND PRINT REPLY

print(wrappedSocket.recv(1024))

# CLOSE SOCKET CONNECTION
wrappedSocket.close()

这是客户代码:
#/usr/bin/python3

import socket
import ssl

HOST, PORT = '127.0.0.1', 12345

# CREATE SOCKE
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# WRAP SOCKET
wrappedSocket = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_SSLv23, ciphers="ADH-AES256-SHA")

# connect and send a message
wrappedSocket.connect((HOST, PORT))
wrappedSocket.send(b"Hello")

wrappedSocket.close()

下面是我在服务器端遇到的错误:
回溯(最近一次呼叫时间):
文件“server.py”,第18行,in
wrappedSocket=ssl.wrap_socket(客户端,服务器端=True,ssl_version=ssl.PROTOCOL_SSLv23,ciphers=“ADH-AES256-SHA”)
文件“/usr/lib/python3.4/ssl.py”,第890行,在wrap_socket中
密码=密码)
文件“/usr/lib/python3.4/ssl.py”,第509行,在init中
raise ValueError(“必须为服务器端指定certfile”
值错误:必须为服务器端操作指定certfile
请注意,我不需要复杂的SSL连接,我只是在寻找最简单的方法来加密客户端和服务器之间的数据,就像使用ncat选项(从服务器端--ssl和客户端ncat --ssl -l -p 12345一样)。
PS:我正在使用Ubuntu15.10和Python3。

最佳答案

您可以使用openssl生成自签名证书,并在wrap_socket中指定certfile属性和keyfile属性服务器端
生成RSA公钥/私钥对
openssl genrsa -out private.pem 2048
生成自签名证书
openssl req -new -x509 -key private.pem -out cacert.pem -days 1095

10-07 16:25