我只是按照Jenkins中使用https的说明进行操作:How To Setup HTTPS within Jetty一切正常。当我从任何浏览器点击它时,它是安全的:
不幸的是,当我使用python与Jenkins交互时,我现在收到错误:
import urllib2
import ssl
print(ssl.OPENSSL_VERSION)
response = urllib2.urlopen('https://jenkins.clearcareonline.com:8443')
OpenSSL 1.0.2l 25 May 2017
Traceback (most recent call last):
文件" foo.py",第6行,in response = urllib2.urlopen(' https://jenkins.clearcareonline.com:8443') 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第154行,在urlopen return opener.open(url,data,timeout) 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第429行,处于打开状态 response = self._open(req,data) 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第447行,在_open中 ' _open',req) 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第407行,在_call_chain中 result = func(* args) 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第1241行,https_open 上下文= self._context) 文件" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py" ;,第1198行,在do_open中 提出URLError(错误) urllib2.URLError:
我在Mac上。正如你所看到的,我甚至尝试更新我的openssl包(最初是OpenSSL 0.9.8zh 2016年1月14日),我也得到了同样的错误。
这就是为什么我认为它与Jenkins有关(或Jenkins是如何通过Jetty启动的):我使用SAME证书进行另一个安全的应用程序,我可以运行相同的脚本,它运行正常。< / p>
换句话说,使用相同的证书:
This fails: urllib2.urlopen('https://jenkins.clearcareonline.com:8443')
This passes: urllib2.urlopen('https://apps.clearcareonline.com')
因此Java 8启动Jetty的方式导致python中出现CERTIFICATE_VERIFY_FAILED错误。我使用的是Python 2.7.12。它不仅仅适用于Mac。我开了一个AWS linux盒子,得到了相同的结果。
有关如何启动Jenkins的任何想法,以便我不会得到该python错误? 也许在Jenkins面前抛出一个ELB / nginx并在ELB上进行证书终止?我还添加了&#34; JENKINS_JAVA_OPTIONS =&#34; -Dhttps.protocols = TLSv1,TLSv1.1,TLSv1.2&#34;到我的/ etc / sysconfig / jenkins,但它没有改变任何东西。