【问题标题】:Best way to obtain a secure connection using Python urllib使用 Python urllib 获得安全连接的最佳方法
【发布时间】:2021-10-14 13:30:42
【问题描述】:

希望这是一个容易有人回答的问题。我正在用 Python 编写应用程序,部分应用程序使用 API 获取下载链接,然后使用该链接下载相应的服务器更新。目前我正在使用urllib.request.urlopen() 完成此操作,并希望安全地这样做。因此我想知道是否仅在 URL 中指定 https 就足够了,或者我是否还必须使用 context 参数?

Python 文档在如何处理 HTTPS 请求方面有点含糊,但据我所知,现在在 URL 中指定 https 就足够了。

【问题讨论】:

    标签: python python-3.x security


    【解决方案1】:

    urllib.request.urlopen 的文档中,有一个关于上下文参数的http.client.HTTPSConnection 类的引用。在 HTTPSConnection 类的文档中,有一个security considerations 的链接。在这里它指出:

    对于客户端使用,如果您对安全策略没有任何特殊要求,强烈建议您使用 create_default_context() 函数来创建 SSL 上下文。它将加载系统的可信 CA 证书,启用证书验证和主机名检查,并尝试选择合理安全的协议和密码设置。

    鉴于urllib.request.urlopen() 上的文档显示 context 是一个可选参数,您可能不必使用它来建立安全的 https 连接,但考虑到安全注意事项部分所说的内容,我会使用

    ssl.create_default_context()
    

    生成上下文是一种很好的做法

    urllib.request.urlopen("https://www.stackoverflow.com", context=ssl.create_default_context())
    

    编辑

    在查看urllib.request.urlopen 的源代码后,如果您未指定上下文但使用了 https url,它看起来会为您提供默认上下文。如果您不向 urlopen() 提供上下文,它将调用 build_opener() 并在该函数的 cmets 中声明

    开启程序将使用几个默认处理程序,包括支持 用于 HTTP、FTP 和适用的 HTTPS。

    所以最终的答案是你应该可以不提供上下文,它只需要 url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2011-09-24
      • 2018-07-19
      相关资源
      最近更新 更多