Alpine 3.3、Python 2.7.11、urllib2导致SSL:CERTIFICATE\u VERIFY\u失败

Alpine 3.3、Python 2.7.11、urllib2导致SSL:CERTIFICATE\u VERIFY\u失败,python,ssl,alpine,Python,Ssl,Alpine,我有一个小文件 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 cal

我有一个小文件

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)>
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/urllib2.py”,第154行,在urlopen中
返回opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第431行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第449行,打开
"开放",
文件“/usr/lib/python2.7/urllib2.py”,第409行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第1240行,https_open
上下文=自身(上下文)
文件“/usr/lib/python2.7/urllib2.py”,第1197行,打开
引发URL错误(err)
urllib2.URLError:
昨天,我被最新的OpenSSL 1.0.2g版本所困扰,它导致了
py加密
无法编译。幸运的是,
py-cryptography
的人在几个小时后发布了一个新版本的PyPI。问题是OpenSSL中的一个函数获得了一个新的签名


这可能与此相关,还是我遗漏了什么?

您需要安装ca证书才能验证公共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')"]

您需要升级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升级将升级以下各项:

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

谢谢,这确实救了我。是的,谢谢,公认的答案已经是解决方案,告诉我添加
ca证书。哦,我明白了,在我的情况下,升级是不必要的,但是谢谢你的提示,它可能会在某个时候派上用场。但是这些升级不会被应用吗?我想当我安装
pythondev
时,我可以看到它也在升级所有使用过的库。对于apk,升级将“升级当前安装的软件包”。在alpine的更高版本中,需要一个libssl和libcrypto补丁。添加时,即apk add python dev,它将为该包引入维护人员请求的依赖项,这些依赖项可能不同。