SSL封装套接字:AttributeError:'module'对象没有'wrap_socket'属性

3 投票
3 回答
13501 浏览
提问于 2025-04-16 10:43

我在OSX上用python 2.6做一个非常简单的例子,但我总是遇到这个问题:

Traceback (most recent call last):
  File "ssl.py", line 1, in <module>
    import socket, ssl
  File "/Users/Dennis/ssl.py", line 5, in <module>
    sslSocket = ssl.wrap_socket(s)
AttributeError: 'module' object has no attribute 'wrap_socket'

代码:

import socket, ssl

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('irc.freenode.net', 7000))
sslSocket = ssl.wrap_socket(s)
print repr(sslSocket.server())
print repr(sslSocket.issuer())
sslSocket.write('Hello secure socket\n')
s.close()

我到底哪里做错了呢?

3 个回答

0

如果你没有把自己的脚本命名为 ssl.py,并且使用的是 Python 3.12 或更新的版本,那这种情况是正常的:

要去掉 ssl.wrap_socket() 这个函数,因为它在 Python 3.7 中就已经不推荐使用了。现在应该创建一个 ssl.SSLContext 对象,然后调用它的 ssl.SSLContext.wrap_socket 方法。任何仍然使用 ssl.wrap_socket() 的包都是有问题的,并且不安全。

来源: https://docs.python.org/3.12/whatsnew/3.12.html#ssl

5

你的脚本是:ssl.py

当你执行 import ssl 时,它会调用你自己写的这个脚本,所以你会看到 AttributeError 的错误信息。

把你的脚本改个名字,这样就应该能正常运行了。

18

不要把你的脚本命名为 ssl.py,因为如果你把脚本命名为 ssl.py,然后再使用 import ssl 这个命令,你实际上是在导入你自己写的这个脚本,而不是导入真正的SSL库。

撰写回答