python - Python 文档文章“安全注意事项”关于 `smtplib` 的 SSL 上下文
问题描述
1.smtplib.SMTP_SSL
在 Python 3 Docs 中smtplib.SMTP_SSL
说:
class smtplib.SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None, certfile=None, [timeout, ]context=None, source_address=None)
(...)上下文,也是可选的,可以包含
SSLContext
并允许配置安全连接的各个方面。请阅读安全注意事项以了解最佳做法。
2. 安全注意事项文章
因此,请阅读上面提到的安全注意事项:
(...) 强烈建议您使用该
create_default_context()
函数来创建 SSL 上下文。
和
(...) 如果您通过
SSLContext
自己调用构造函数来创建 SSL 上下文,则默认情况下它不会启用证书验证或主机名检查。
所以看起来我肯定想要前者:create_default_context
对于 SSL 上下文。
3.smtplib.py
如果我省略了以下参数,我快速smtplib.py
浏览了一下会发生什么:context
smtplib.SMTP_SSL
if context is None: context = ssl._create_stdlib_context(certfile=certfile, keyfile=keyfile)
因此,有一个调用ssl._create_stdlib_context
似乎与ssl.create_default_context
安全注意事项文章中推荐的不同。
4.ssl.py
在ssl.py
我发现的函数文档字符串中:
All Python stdlib modules shall use this function to create SSLContext objects in order to keep common settings in one place. The configuration is less restrict than create_default_context()'s to increase backward compatibility.
5. 问题
smtplib.SMTP_SSL
根据安全注意事项文章,我应该如何打电话?看来我真的需要create_default_context
每次都“手动”调用来创建上下文?
server = smtplib.SMTP_SSL(context=ssl.create_default_context())
或者是
server = smtplib.SMTP_SSL()
足够的?为什么?
太感谢了 :-)
解决方案
最佳做法是使用server = smtplib.SMTP_SSL(context=ssl.create_default_context())
.
根据文档字符串,由于向后兼容性,_create_stdlib_context
限制较少。create_default_context
参考:https ://github.com/python/cpython/blob/master/Lib/ssl.py#L581
推荐阅读
- javascript - 如何获取单击文档的 ID 并获取标题并将其使用/保存在 Firestore 中?
- python - Python 正则表达式在 js 文件中查找函数和参数对
- javascript - Notepad++ 中的 SourceCookifier 并不总是检测 Javascript 函数
- node.js - 带有 $text 索引的 MongoDB 查找无法正常工作
- math - 查找两组 3d 点之间的对应关系
- angular - combineLatest 与 BehaviourSubject.asObservable 导致流是预期错误
- python - Biopython 在字符串中查找基序和删除目标序列的问题
- c - 将 .dat 数据添加到 C 结构?
- python - 按 ID 分组并检查值是否在误差范围内相同?
- python - 如何从网站上抓取特定字段?