【问题标题】:Alpine 3.3, Python 2.7.11, urllib2 causing SSL: CERTIFICATE_VERIFY_FAILEDAlpine 3.3、Python 2.7.11、urllib2 导致 SSL:CERTIFICATE_VERIFY_FAILED
【发布时间】:2016-03-03 03:13:52
【问题描述】:

我有这个小 Dockerfile

FROM alpine:3.3
RUN apk --update add python
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"]

使用docker build -t alpine-py/01 . 构建它,然后使用docker run -it --rm alpine-py/01 运行它会创建以下输出

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 431, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 449, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1240, in https_open
    context=self._context)
  File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>

昨天我被最近的 OpenSSL 1.0.2g 版本所困扰,导致py-cryptograpy 无法编译。幸运的是,来自py-cryptography 的人几个小时后在 PyPI 上发布了一个新版本。问题是 OpenSSL 中的一个函数获得了新签名。

这可能是相关的还是我遗漏了什么?

【问题讨论】:

    标签: python ssl alpine


    【解决方案1】:

    您需要安装 ca-certificates 才能验证公共 CA 签署的证书:

    FROM alpine:3.3
    RUN apk --no-cache add python ca-certificates
    CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"]
    

    【讨论】:

    • 谢谢,这确实救了我。
    【解决方案2】:

    您需要升级 Alpine,因为 libssl 需要使用补丁升级

    FROM alpine:3.3
    RUN apk -U upgrade && \
        apk -U add python ca-certificates && \
        update-ca-certificates
    CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"]
    

    apk -U upgrade 将升级这些:

    • libcrypto1.0 (1.0.2e-r0 -> 1.0.2g-r0)
    • libssl1.0 (1.0.2e-r0 -> 1.0.2g-r0)

    【讨论】:

    • 是的,谢谢,通过告诉我添加ca-certificates,接受的答案已经是解决方案。哦,我明白了,就我而言,升级不是必需的,但感谢您的提示,它可能会派上用场。
    • 但是这些升级不会得到应用吗?我认为当我安装 python-dev 时,我可以看到它也在升级所有使用的库。
    • 对于 apk,升级将“升级当前安装的包”。在更高版本的 alpine 中,需要一个用于 libssl 和 libcrypto 的补丁。添加时,即 apk add python-dev,它将拉入维护者为该包请求的依赖项 - 这可能不一样。
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2017-01-02
    • 2014-06-06
    • 2013-03-27
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多