2016-10-10 27 views
0

我使用Python 2.4.4和OpenSSL 0.9.8k(沒有選擇的餘地)用Python創建

我已經提到的文檔SSL套接字: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

socket.ssl只能夠啓動SSL連接,並且給定的可選證書和密鑰用於使用客戶端證書。 socket.ssl無法在服務器端使用,它看起來像Python 2.4.4在任何核心模塊中都沒有提供此功能。在後來的python版本中,你可以使用ssl模塊,但是2.4.4似乎沒有這個功能。

+0

不幸聽到,但我想這只是從2.4.4升級更多的槓桿作用。謝謝。 – Lighthat