服务器证书验证失败: 发行者不受信任

我得到以下错误时,运行一个 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
151889 次浏览

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

或者就像@AndrewSpear 在下面说的那样

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

Svn 将要求您确认。永久接受它。

之后,这应该工作的后续请求,从蚂蚁脚本。

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

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

将它添加到 svn 命令参数中,就不需要手动运行 svn 来永久接受它。

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;

我不会用:

svn checkout

为了授权服务器身份验证,我宁愿使用:

svn list https://your.repository.url

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

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

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

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

--non-interactive

--trust-server-cert

只需将服务器证书安装在客户机的受信任根证书容器中(如果证明它已过期,则可能无法工作)。 欲了解更多细节,请看这篇文章的类似问题。

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

在命令行工作期间。我使用 Ant 在构建完成后提交一个工件。经历了同样的问题... 手动除了证书没有工作(詹金斯是有趣的方式)。将这些选项添加到 svn 命令:

非互动性

信任-服务器-证书

来自 cmd run: SVN List URL 你将获提供3个选项(r)弹出,(a)接受,(p)永久。 输入 p。 这个问题已经解决了

如果在 Windows 服务器上对 Jenkins 使用 svn,则必须使用相同的 Jenkins 的 Windows 服务用户接受 https 证书。
因此,如果您的 Jenkins 服务作为“ MYSERVER 管理员”运行,您必须在所有其他命令之前使用该命令,当然只能使用一次:

Runas/user: MYSERVER Administrator“ svn —— username user —— password password list https://myserver/svn/REPO

Svn 要求您接受证书和 把它存储在正确的路径上

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

正如在 这个注释(当然我在尝试解决这个问题时忽略了这一点)中指出的那样,在 颠覆1.9中忽略证书验证问题的命令行选项已经改变,现在应该使用 --trust-server-cert-failures

例如:

--non-interactive --trust-server-cert-failures unknown-ca,cn-mismatch,expired,not-yet-valid,other

下面是来自 svn 1.13的相关内联帮助:

—— trust-server-cert: 已弃用; 与 —— trust-server-cert-fault = known-ca

—— trust-server-cert-fault ARG: with ——非交互式,接受 SSL 服务器 带有故障的证书; ARG 以逗号分隔 “未知 -ca”(未知权限)清单, “ cn-mismatch”(主机名错误匹配) ,“過期” (已过期的证书) ,’尚未有效’(尚未 有效证书)及「其他」(所有其他 单独分类的证书错误)。