当前位置: 首页 > 面试题库 >

在Python中打开SSL套接字连接

暨成双
2023-03-14
问题内容

我正在尝试在Python中建立安全的套接字连接,而使用SSL有点麻烦。我已经找到一些有关如何与SSL建立连接的代码示例,但它们都涉及密钥文件。我尝试连接的服务器不需要接收任何密钥或证书。我的问题是,我该如何实质上包装带有SSL的python套接字连接。我知道我应该使用的密码是ADH- AES256-SHA,协议是TLSv1。这就是我一直在尝试的:

import socket
import ssl

# SET VARIABLES
packet, reply = "<packet>SOME_DATA</packet>", ""
HOST, PORT = 'XX.XX.XX.XX', 4434

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

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

# CONNECT AND PRINT REPLY
sock.connect((HOST, PORT))
sock.send(packet)
print sock.recv(1280)

# CLOSE SOCKET CONNECTION
sock.close()

运行此代码时,没有任何错误,但响应为空。当尝试在命令行中调试此代码时,通过在python终端中键入并逐行粘贴代码,我得到的是我在运行时假设的状态代码sock.send(packet)。我得到的整数响应是26。如果有人知道这意味着什么,或者可以提供任何帮助,将不胜感激。提前致谢!


问题答案:

好的,我找出了问题所在。我真是愚蠢。two我的代码有问题。我的第一个错误是在指定应该ssl_version放入的时间TLSv1ssl.PROTOCOL_TLSv1。第二个错误是我没有引用包装好的套接字,而是调用了我创建的原始套接字。下面的代码似乎对我有用。

import socket
import ssl

# SET VARIABLES
packet, reply = "<packet>SOME_DATA</packet>", ""
HOST, PORT = 'XX.XX.XX.XX', 4434

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

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

# CONNECT AND PRINT REPLY
wrappedSocket.connect((HOST, PORT))
wrappedSocket.send(packet)
print wrappedSocket.recv(1280)

# CLOSE SOCKET CONNECTION
wrappedSocket.close()

希望这可以帮助到别人!



 类似资料:
  • 问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您

  • 问题内容: 我正在尝试为python中的类编写单元测试。该类在 init 上打开一个tcp套接字。我试图对此进行模拟,以便可以断言使用正确的值调用了连接,但是显然在单元测试中实际上并未发生。我已经厌倦了MagicMock,补丁程序等,但是还没有找到解决方案。 到目前为止我的班级看起来像 问题答案: 如果您只想断言被正确调用,这很简单 如果必须先导入模块才能访问,则需要稍微调整补丁:

  • 我有一个android应用程序,打开一个套接字连接到一个服务器使用wasync/大气。这可以使用超文本传输协议。如果我用SSL连接到https地址,套接字将不会打开。我能够与DefaultHttpClient通信到https套接字。我能够在桌面应用程序中使用相同的代码,并使用SSL连接套接字。 当我尝试打开套接字时,会有整整60秒的暂停,然后出现以下异常: java.net.连接异常:wss://

  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • 问题内容: 我正在加密服务器和客户端之间的TCP连接。在研究和测试过程中,我倾向于使用秘密密钥加密。我的问题是我找不到有关如何实现此功能的任何教程。我发现的教程围绕一次HTTP请求进行,我只需要一个SSL套接字。 我到目前为止编写的代码如下。我几乎可以肯定它需要扩展,我只是不知道该怎么做。任何帮助表示赞赏。 接受客户端连接的服务器代码 我只是不知道如何实际进行握手。 参考:http : //doc

  • Hi想知道是否有办法设置套接字的超时,以及在连接握手之前重试的次数。我在非常糟糕的连接模式下测试了我的应用程序,我为我在Volley中的请求设置了重试策略为10秒,但SSL握手似乎是个问题,因为它有一个默认的超时设置为60秒,而Volley超时只被触发当套接字由于尝试次数或超时而失败时。 下面是我的方法: 我正在使用截击来提出我的请求,我实现这一点的方法是: 我还尝试设置了这样的超时: