纯文本身份验证:Python

时间:2017-03-08 19:37:24

标签: python-2.7 sockets networking tcp-ip tls1.2

我正在尝试使用用户ID和pwd创建与Money.net API的安全连接,但我没有收到任何来自服务器的响应。我正在使用Ipython Notebook进行开发,我是编程和Python世界的新手:)

import socket
import sys
Server_address = ('api.data.money.net',50010)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print sys.stderr, 'connecting to %s port %s' %Server_address
s.connect(Server_address)
####### I pass plain text authentication credentials below #####
username, password, DATA

没有任何事情发生,服务器也没有回复“OK”'正如预期的那样

我也尝试过下面的TLS socket.wrap方法,但它说#34;连接超时"

import socket
import ssl

# SET VARIABLES
#packet, reply = "QS MSFT", ""
HOST, PORT = 'api.data.money.net', 50010

# CREATE SOCKET
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(30)

# WRAP SOCKET
wrappedSocket = ssl.wrap_socket(sock,keyfile=None,server_side=0,
                            ssl_version=ssl.PROTOCOL_TLSv1,                                    cert_reqs=ssl.CERT_NONE,do_handshake_on_connect=True)


# CONNECT AND PRINT REPLY
wrappedSocket.connect((HOST, PORT))


#Plain Text authentication
'username','password'

我收到回复

'username','password'

然后我执行以下

packet,reply="QS MSFT",""
wrappedSocket.send(packet)
print wrappedSocket.recv(1280)

我最终得到以下错误

SSLError: ('The read operation timed out',)

1 个答案:

答案 0 :(得分:1)

我希望使用https而不是套接字通过互联网公开API。你确定你必须这样做吗?

有很多软件包可以使用基本身份验证进行安全呼叫。 请求包是更高级别并在许多项目中使用,因此这是您最安全的选择。

请注意,这些库的早期版本只是忽略了证书验证,如果它必须非常安全,请确保您。

查看Python, HTTPS GET with basic authentication的答案。