【问题标题】:Server certificate verification failed: issuer is not trusted服务器证书验证失败:颁发者不受信任
【发布时间】:2011-03-10 00:37:54
【问题描述】:

运行 ANT 脚本目标时出现以下错误。提示“服务器证书验证失败”的错误消息。请帮助如何解决这个问题。我在 Windows XP 中工作。

C:\apache-ant-1.8.1>ant checkout
Buildfile: C:\Program Files\Java\apache-ant-1.8.1\build.xml

checkout:
[svn] Using command line interface
Svn : Checking out a working copy from a repository :
co -r HEAD https://col.../trunk C:\ant-1.8.1\Test_Checkout 
--username 69 --password *******--non-interactive
svn: PROPFIND request failed on '/svn/asia-pac-financials/trunk'
svn: PROPFIND of '/sv.../trunk': 
Server certificate verification failed: 
issuer is not trusted (https://col....com)

BUILD FAILED
C:\apache-ant-1.8.1\build.xml:16: Can't checkout

Total time: 3 seconds

【问题讨论】:

    标签: svn ant


    【解决方案1】:

    您能否尝试使用命令行手动运行一次svn checkout 到您的 URL https://yoururl/trunk C:\ant-1.8.1\Test_Checkout 并接受证书。

    或者正如@AndrewSpear 下面所说的

    而不是从终端 (Mac)/命令行 (Win) 手动运行 svn list https://your.repository.url 以获取永久接受证书的选项

    svn 会要求您确认。永久接受。

    之后,这应该适用于来自 ant 脚本的后续请求。

    【讨论】:

    • 我在这里还添加了一个 PHP 示例脚本:php.net/manual/en/function.svn-auth-set-parameter.php#104300 用于同样的问题。
    • 我没有手动签出,而是从终端 (Mac)/命令行 (Win) 运行 svn list https://your.repository.url 以获得永久接受证书的选项。
    • 在 OS X 上,我需要使用 sudo 和 svn list 命令,否则选择 (p)ermanent 似乎不起作用。
    • 我将 svn://repos.server.url 替换为 https://repos.server.url,只是我被要求这样做接受 SSL 证书。
    【解决方案2】:

    对所有可用选项运行“svn help commit”。您将看到有一个选项负责接受服务器证书:

    --trust-server-cert : 接受未知的 SSL 服务器证书 提示(但仅限--non-interactive

    将其添加到您的 svn 命令参数中,您无需手动运行 svn 即可永久接受它。

    【讨论】:

    • 这是自动化脚本的最佳解决方案,通常不会像已接受的答案中列出的步骤那样奢侈。应该注意的是,盲目接受 SSL 证书基本上会破坏 SSL 的全部目的,因此可能会使您面临中间人攻击。
    • 如果服务器向您发送的证书的主机名值与实际服务器主机名不同
    • 我和安德烈有同样的问题:如果名字不匹配,验证仍然失败。
    • 今晚在我们的 SVN 服务器上更新了我的证书并得到了这个。每个浏览器都信任该证书。为什么 SVN 客户端突然发疯了?用你的伎俩解决了我的问题。
    • --trust-server-cert 现在已弃用,不再像以前那样工作。等效参数为--trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid,other。见svnbook.red-bean.com/en/1.7/svn.ref.svn.c.commit.html
    【解决方案3】:

    我不会使用:

    svn checkout
    

    只是为了授权服务器认证,我宁愿使用:

    svn list https://your.repository.url
    

    它也会要求您进行身份验证。

    如果需要授权给无法登录的用户,请运行:

    sudo -u username svn list https://your.repository.url
    

    【讨论】:

    • 这成功帮助我在 El Capitan 上安装了 svn。
    【解决方案4】:

    如果您在 Windows Server 上将 svn 与 Jenkins 一起使用,您必须接受使用同一 Jenkins 的 Windows 服务用户的 https 证书。
    因此,如果您的 Jenkins 服务以“MYSERVER\Administrator”身份运行,您必须在所有其他命令之前使用此命令,当然只有一次:

    runas /user:MYSERVER\Administrator "svn --username user --password 密码列表https://myserver/svn/REPO"

    svn 要求您接受证书并将其存储在正确的路径中

    在此之后,您将能够在 Windows 批处理命令步骤中直接在 jenkins 作业中使用 svn。

    【讨论】:

    • 如果您作为默认的 Windows NT 服务用户(本地系统帐户,即“nt authority\system”)运行,那么您需要使用 psexec 打开一个 cmd.exe 作为这个 Windows用户并运行交互式 svn.exe 命令,例如“svn --username yourSvnUser list yourSvnUrl”,以便您可以接受 SVN 服务器的 SSL 证书。之后,您可以运行“svn auth”来检查存储的凭据缓存。见stackoverflow.com/questions/77528/…
    【解决方案5】:

    其他答案对我不起作用。我正在尝试让命令行在 Jenkins 中工作。 您只需要以下命令行参数:

    --non-interactive

    --trust-server-cert

    【讨论】:

      【解决方案6】:

      只需将服务器证书安装在客户端受信任的根证书容器中(如果经过认证,它已过期可能无法使用)。 有关更多详细信息,请参阅此类似问题的帖子。

      https://stackoverflow.com/a/21238125/3215589

      【讨论】:

        【解决方案7】:

        在命令行工作期间。构建完成后,我正在使用 Ant 提交工件。遇到了同样的问题......手动排除证书不起作用(詹金斯很有趣)。将这些选项添加到您的 svn 命令中:

        --非交互式

        --信任服务器证书

        【讨论】:

          【解决方案8】:

          从 cmd 运行:SVN 列表 URL 您将获得 3 个选项 (r)eject, (a)ccept, (p)ermanently。 输入 p。 这为我解决了问题

          【讨论】:

            【解决方案9】:
            string cmdArguments = $@"/k svn log --trust-server-cert --non-interactive ""{servidor}"" --username alex --password alex -r {numeroRevisao}";
            ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe", cmdArguments);
            
            cmd.CreateNoWindow = true;
            cmd.RedirectStandardOutput = true;
            cmd.RedirectStandardError = true;
            cmd.WindowStyle = ProcessWindowStyle.Hidden;
            cmd.UseShellExecute = false;
            
            Process reg = Process.Start(cmd);
            string output = "";
            
            using (System.IO.StreamReader myOutput = reg.StandardOutput)
            {
                output += myOutput.ReadToEnd();
            }
            using (System.IO.StreamReader myError = reg.StandardError)
            {
                output += myError.ReadToEnd();
            }
            
            return output;
            

            【讨论】:

            • 你能解释一下你的代码是如何解决他的问题的吗?此外,您可能想稍微改进一下布局(空白)。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-30
            • 2021-06-18
            • 2019-03-19
            • 2015-01-17
            相关资源
            最近更新 更多