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)
(...) context, также необязательно, может содержать SSLContext
и позволяет настраивать различные аспекты безопасного соединения.Пожалуйста, прочитайте Рекомендации по безопасности для получения рекомендаций.
2.Статья по соображениям безопасности
Прочтите вышеупомянутое Соображения по безопасности , где написано:
(...) Настоятельно рекомендуется использовать create_default_context()
функция для создания контекста SSL.
и
(...) если вы создадите контекст SSL, вызвав конструктор SSLContext
, он не будетпо умолчанию проверка сертификата или проверка имени хоста включены.
Так что, похоже, я определенно хочу первое: 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()
достаточно?И почему?
Большое вам спасибо: -)