我在使用代理进行互联网访问的公司网络中运行 Jenkins CI 。
我尝试在插件 - >高级中配置代理详细信息,但即使凭据正确(是的,我多次检查过),它也无法验证“测试网址”在http://google.com上并返回
无法连接http://google.com(代码407)。
奇怪的是,Jenkins仍然可以自己下载插件(哇!),但完全无法连接到任何HTTP资源。从控制台输出的消息是:
←[0mApr 16,2015 1:58:56 PM org.apache.commons.httpclient.HttpMethodDirector亲 cessProxyAuthChallenge信息:使用NTLM进行身份验证失败@ proxyrye.asg.com:80 Apr 16,2015 2:09:09 PM org.apache.commons.httpclient.HttpMethodDirector执行WithRetry 信息:处理时捕获的I / O异常(java.net.ConnectException) 要求:连接超时:连接2015年4月16日下午2:09:09 org.apache.commons.httpclient.HttpMethodDirector执行WithRetry 信息:重试请求2015年4月16日下午2:09:10 org.apache.commons.httpclient.auth.AuthChallengeProcesso r selectAuthScheme INFO:选择的ntlm认证方案←[31mApr 16,2015 2:09:10 PM org.apache.commons.httpclient.HttpMethodDirector au thenticate SEVERE:凭证不能用于NTLM 身份验证:org.apache.commons.h ttpclient.UsernamePasswordCredentials org.apache.commons.httpclient.auth.InvalidCredentialsException: 凭证不能用于NTLM身份验证: org.apache.commons.httpclient.UsernamePasswo rdCredentials 在org.apache.commons.httpclient.auth.NTLMScheme.authenticate(NTLMScheme) 的.java:332)
答案 0 :(得分:6)
我们的詹金斯在我们公司的代理人背后有这个问题很长一段时间。有一天,他们改变了我们代理所需的认证方案的顺序。这是我们詹金斯停止连接互联网的那一天。
显然Jenkins is not able to connect via a proxy that requires NTML authentication。这就是我to issue an improvement for Jenkins to extend the proxy configuration screen的原因。在扩展工作期间,我发现Jenkins没有使用所有代理相关的系统属性,因此它无法与NTLM一起使用。
因此,只允许 NTLM身份验证的代理的答案是:它不能通过Jenkins UI工作。
但是如果你的代理允许其他身份验证方案,你可以按照我们的解决方法,它很简单:将java系统属性-Dhttp.auth.preference="basic"
添加到你的Jenkins启动脚本或者那个你的容器。
这将强制Jenkins使用基础身份验证而非NTLM连接到您的代理的基础库和Java机制。
答案 1 :(得分:1)
在jdk 8上使用jetty服务器运行jenkins时出现此错误。
要解决问题,请按照以下步骤操作:
第1步:
在浏览器中打开网址https://updates.jenkins.io/
第2步:
导出中级证书:
Internet Explorer - >工具 - >互联网选项 - >内容 - >证书 - > 转到“受信任的根证书颁发机构”选项卡,找出DST根CA X3证书。然后导出证书: 选择证书 - >出口 - > DER编码的二进制格式 - >保存 将证书保存为jenkins.cer(对我而言,它已保存到C:\ jenkins \ jenkins.cer
(来自Firefox - >工具 - >选项 - >高级 - >加密 - >查看证书)
第3步: 创建名为cacertskeystore的密钥库
JAVA_HOME \ bin \ keytool -keystore C:\ jenkins \ cacertskeystore -genkey -alias cacerts
第4步:
使用以下命令将jenkins.cer添加到cacertskeystore
JAVA_HOME \ bin \ keytool -import -trustcacerts -Keystore C:\ jenkins \ cacertskeystore -alias jenkins -file C:\ jenkins \ jenkins.cer
步骤5:使用以下命令启动jetty服务器 JAVA_HOME \ bin \ java -DJENKINS_HOME = C:/ jenkins / home -Djavax.net.ssl.trustStore = C:/ jenkins / cacertskeystore -Djavax.net.ssl.trustStorePassword = password-provided-while-creating-keystore -jar jenkins .war --httpPort = 8080 - httpListenAddress = localhost
答案 2 :(得分:1)
我在受错误影响的同时发现了这个问题:https://issues.jenkins-ci.org/browse/JENKINS-48775
临时的解决方法是打开Jenkins脚本控制台并输入
ProxyConfiguration.open(new java.net.URL("http://jenkins.io")).content
由于它是一个HTTP URL,而不是https URL,因此它将刷新一些缓存并使插件管理器至少在一段时间内可以使用代理设置。有关更多详细信息,请参见错误报告。
答案 3 :(得分:1)
对于Java JDK8及更高版本,Oracle已禁用基本身份验证的基本身份验证隧道。如果要再次使用基本模式(安全性将受到损害),请执行Jenkins将此参数添加到您的JAVA_OPTS变量中
"-Djdk.http.auth.tunneling.disabledSchemes="
默认值为
"-Djdk.http.auth.tunneling.disabledSchemes=Basic",
由于默认情况下“基本方案”为“禁用”,因此即使您的凭据确定,它也会返回HTTP 407错误。
有关链接https://issues.jenkins-ci.org/browse/JENKINS-48775的更多信息,感谢以色列罗密欧·斐济
答案 4 :(得分:0)
如果解析异常,则说明
凭据不能用于NTLM身份验证
因此,根据https://www.safaribooksonline.com/library/view/jenkins-the-definitive/9781449311155/ch04s09.html,您可能还需要提供域名。
如果您的代理使用的是Microsoft的NTLM身份验证方案,那么您需要提供域名和用户名。您可以将两者放在用户名字段中:只需输入域名,然后输入反斜杠(\),然后输入用户名,例如“MyDomain \ Joe Bloggs”。
也许这就是问题?
答案 5 :(得分:0)
我今天遇到了这个问题,它最终成为了Spira配置中Spira URI末尾的空间。一定是糟糕的复制和粘贴。
答案 6 :(得分:0)
我在测试中遇到了无法连接到http://google.com(代码407)的错误。但是jenkins可以检查新版本并安装插件和更新。
无论测试如何,都要输入凭据。然后保存并转到可用的插件/检查jenkins版本以检查它是否有效。
答案 7 :(得分:0)
以下解决方案适用于Windows 7计算机中的407问题。
答案 8 :(得分:0)
简单黑客:
尝试使用域的IP而不是地址。 -Dhttp.auth.preference="basic"
实际上对我不起作用:(
PS。将浏览器和代理以及Jenkins代理更改为IP
答案 9 :(得分:0)
我也遇到了相同的 jenkins-proxy-407-错误
问题我已经找到解决方法,希望对其他用户有用:
您可以安装 Cntlm身份验证代理,该代理位于您的应用程序和公司代理之间,并即时添加NTLM身份验证。
在此处查看http://cntlm.sourceforge.net/
安装CNTLM后,将您的NTLM凭据添加到文件 cntlm.ini 中。您还可以配置侦听端口或默认为3128。
在此处查找CNTLM安装的详细说明
启动CNTLM服务并转到jenkins,添加
主机:主机名或本地主机
端口:侦听cntlm.ini中指定的端口或默认3128
将用户名和密码保留为空白,您将设置为使用詹金斯。