使用python创建SSL套接字

时间:2016-10-10 14:47:19

标签: python sockets ssl

我使用的是Python 2.4.4和OpenSSL 0.9.8k(不是选择)

我已经参考了文档:https://docs.python.org/release/2.4.4/lib/module-socket.html

并且几乎每次提及" openSSL"和" python"在互联网上,我还没有找到解决问题的方法。

我只是编写一个测试程序来启动SSL连接。这是代码:

服务器

#!/usr/bin/python
import socket
import _ssl

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 4433))
s.listen(5)

while True:
  client, address = s.accept()
  ssl_client = socket.ssl(client,
                          keyfile='keyfile',
                          certfile='certfile')
  print "Connection: ", address
  data = ssl_client.read(1024)
  if data:
    print "received data: ", data
    ssl_client.write(data + " Hello, World!")
  del ssl_client
  client.close()

客户端

#!/usr/bin/python
import socket
import _ssl

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('host', 4433))
ssl_s = socket.ssl(s, 
                   keyfile='keyfile', 
                   certfile='certfile')
print 'writing ', ssl_s.write("Hello, World!"), ' bytes to ssl stream'
data = ssl_s.read(1024)
del ssl_s
s.close()

print "received data: ", data

有关此代码的一些注意事项 - keyfilecertfile是指向我的实际密钥和证书文件的路径。这些论点不是问题。主机名也不是问题。我知道使用的端口是4433 - 在我们的要求中,我们的意思是使用通用端口,而不是443.我不知道可以在不同的端口上使用SSL,但无论如何,即使我使用443,我也会得到完全相同的错误。

我可以正常运行服务器,然后当我运行客户端时,我在客户端和服务器的wrap_socket行上收到以下错误:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

由于使用了非443端口,我已经阅读了它,但是再次使用443并没有解决问题。我读过它可能是协议不匹配,但客户端和服务器都默认为SSL2.3。我们打算按照我们的要求使用TLS1.2,但是文档似乎没有关于如何设置SSL协议版本的任何信息。我不确定这是否与我的问题有关。请记住,我不是来打开有关使用过时的SSL和Python版本的对话。

1 个答案:

答案 0 :(得分:1)

socket.ssl仅能够启动SSL连接,并且给定的可选证书和密钥用于使用客户端证书。 socket.ssl无法在服务器端使用,看起来python 2.4.4根本不在任何核心模块中提供此功能。在python的更高版本中,您可以使用ssl模块,但2.4.4似乎没有。