我想使用Python测试Web服务器。我对Python几乎没有经验,但因为它易学和简单易用(这是别人的看法,不是我的),所以鼓励我使用它。我使用的脚本如下:
s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2 = ssl.wrap_socket(s1,
ca_certs="./pki/signing-dss-cert.pem",
cert_reqs=ssl.CERT_REQUIRED,
ssl_version=ssl.PROTOCOL_TLSv1,
server_hostname="localhost")
s2.connect( ("localhost", 8443) )
s2.send("GET / ")
time.sleep(1)
s2.send("HTTP/1.1")
错误信息为:
Traceback (most recent call last):
File "./fetch.sh", line 10, in <module>
server_hostname="localhost")
TypeError: wrap_socket() got an unexpected keyword argument 'server_hostname'
我还尝试使用
servername
,name
,hostname
和sni
但都没有成功。Python文档中没有提到SNI(用于套接字对象的TLS / SSL包装器和SSL wiki页面)。但是我知道SNI和
server_hostname
的补丁在4年前的2010年被纳入了(向SSLContext.wrap_socket
添加*server_hostname*参数,changeset 65593:846c0e1342d0)。我需要访问的等效OpenSSL调用是
SSL_set_tlsext_host_name
。如何指定SNI主机名? (最终,我需要将其设置为任意名称,因为我正在测试代理)。