【问题标题】:Jenkins proxy 407 error詹金斯代理 407 错误
【发布时间】:2015-04-16 18:13:29
【问题描述】:

我在使用代理访问互联网的公司网络中运行 Jenkins CI

我尝试在 Plugins->Advanced 中配置代理详细信息,但即使凭据正确(是的,我检查了很多次),即使在http://google.com 并返回

无法连接到http://google.com(代码 407)。

奇怪的是,Jenkins 本身仍然能够下载插件(哇!),但完全无法连接到任何 HTTP 资源。从控制台输出的消息是:

←[0mA2015 年 4 月 16 日下午 1:58:56 org.apache.commons.httpclient.HttpMethodDirector pro cessProxyAuthChallenge 信息:使用 NTLM @proxyrye.asg.com 进行身份验证失败:80 2015 年 4 月 16 日下午 2:09:09 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.AuthChallengeProcessor selectAuthScheme INFO:已选择 ntlm 身份验证方案 ←[31mApr 2015 年 2 月 16 日下午 2:09:10 org.apache.commons.httpclient.HttpMethodDirector authenticate SEVERE:凭据不能用于 NTLM 身份验证:org.apache.commons.h ttpclient.UsernamePasswordCredentials org.apache.commons.httpclient.auth.InvalidCredentialsException: 凭据不能用于 NTLM 身份验证: org.apache.commons.httpclient.UsernamePasswordCredentials 在 org.apache.commons.httpclient.auth.NTLMScheme.authenticate(NTLMScheme .java:332)

【问题讨论】:

    标签: java apache jenkins proxy ntlm


    【解决方案1】:

    我们在公司代理背后的 Jenkins 遇到这个问题已经有很长时间了。前几天,他们更改了我们代理所需的身份验证方案的顺序。这是我们的 Jenkins 停止连接到互联网的那一天。

    显然是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 使用的底层库和 Java 机制使用基本身份验证而不是 NTLM 连接到您的代理。

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    对于 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感谢Israel Romero Fiji

    【讨论】:

      【解决方案3】:

      以下解决方案适用于 Windows 7 机器中的 407 问题。

      • 1。从 Windows 服务中停止 Jenkins
      • 2。转到 Services.msc > Jenkins > 右键单击​​ > 属性 > 登录 > 此帐户并输入您的用户名和密码
      • 3。点击应用和确定
      • 3。启动 Jenkins

      【讨论】:

      • 太棒了!谢谢。
      【解决方案4】:

      我在 jdk 8 上使用码头服务器运行 jenkins 时遇到此错误。

      要解决问题,请按照以下步骤操作:

      第 1 步:

      在浏览器中打开网址https://updates.jenkins.io/

      第 2 步:

      要导出中间证书:

      Internet Explorer -> 工具 -> Internet 选项 -> 内容 -> 证书 -> 转到受信任的根证书颁发机构选项卡并找出 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 步:使用以下命令启动码头服务器 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

      【讨论】:

        【解决方案5】:

        我在受到错误影响时发现了这个问题:https://issues.jenkins-ci.org/browse/JENKINS-48775

        临时解决方法是打开 Jenkins 脚本控制台并输入 ProxyConfiguration.open(new java.net.URL("http://jenkins.io")).content

        因为它是一个 http url,而不是 https url,它会刷新一些缓存并使插件管理器与代理设置一起工作,至少在一段时间内。有关详细信息,请参阅错误报告。

        【讨论】:

        • 这可行,但是当 Jenkins 重新启动时(以及在某些其他情况下),它需要重做。因此,我确实支持将此作为一种解决方法,但不作为解决方案。
        【解决方案6】:

        如果你解析异常,它会声明

        凭据不能用于 NTLM 身份验证

        因此,根据https://www.safaribooksonline.com/library/view/jenkins-the-definitive/9781449311155/ch04s09.html,您可能还需要提供域名。

        如果您的代理使用 Microsoft 的 NTLM 身份验证方案,则您需要提供域名和用户名。您可以将两者都放在用户名字段中:只需输入域名,后跟一个反斜杠 (\),然后是用户名,例如“MyDomain\Joe Bloggs”。

        也许这就是问题所在?

        【讨论】:

        • 不幸的是没那么容易。我尝试在用户名之前提供和不提供域名 - 仍然无济于事。
        • 我也无法通过我的域\用户进行身份验证。
        【解决方案7】:

        我今天遇到了这个问题,最后在 Spira 配置中的 Spira URI 末尾出现了一个空格。一定是错误的复制和粘贴。

        【讨论】:

          【解决方案8】:

          我在测试中遇到无法连接到 http://google.com(代码 407)错误。但是 jenkins 可以检查新版本并安装插件和更新。

          无论测试如何,都输入凭据。然后保存并转到可用插件/检查 jenkins 版本以检查它是否有效。

          【讨论】:

            【解决方案9】:

            简单破解: 尝试使用域的 IP 而不是地址。 -Dhttp.auth.preference="basic" 实际上对我不起作用:(

            PS。将浏览器和代理以及Jenkins代理都更改为IP

            【讨论】:

              【解决方案10】:

              我也遇到过同样的jenkins-proxy-407-error

              问题

              我已经找到了解决方法,我希望它对其他用户有用:

              您可以安装 Cntlm 身份验证代理,它位于您的应用程序和公司代理之间,可即时添加 NTLM 身份验证。

              请看这里http://cntlm.sourceforge.net/

              安装 CNTLM 后,将 NTLM 凭据添加到文件 cntlm.ini 中。您还可以配置监听端口或默认为 3128。

              在这里找到 CNTLM 安装的详细说明

              https://vijiboy.wordpress.com/2018/03/14/configure-cntlm-to-generate-hash-for-your-password-h-and-verify-m/

              启动CNTLM服务,进入jenkins,添加

              主机:主机名或本地主机

              端口:在cntlm.ini中指定的监听端口或默认3128

              将用户名和密码留空,您就可以使用 Jenkins。

              【讨论】:

                【解决方案11】:

                解决方案如此简单 如果您尝试编辑 jdk.http.auth.tunneling.disabledSchemes=基本 到 jdk.http.auth.tunneling.disabledSchemes= 在位置 C:.......\java-1.8.0-openjdk\jre\lib\net.properties

                然后尝试进入 用正确的条目填写此部分 完毕。 Check this screenshot

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-05-31
                  • 2019-11-11
                  • 2019-05-23
                  • 2016-10-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多