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

Svn 服务器证书验证失败:颁发者不受信任,svn,ant,Svn,Ant,我在运行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 rep

我在运行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 checkout
到您的URL
https://yoururl/trunk C:\ant-1.8.1\Test\u Checkout
使用命令行 并接受证书

或者正如@AndrewSpear在下面所说的那样


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

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;
之后,这将适用于来自ant脚本的后续请求。

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

--信任服务器证书
:接受未知的SSL服务器证书,而不接受 提示(但仅限使用
——非交互式

将它添加到您的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的命令行正常工作。 您只需要以下命令行参数:

--非交互式


--信任服务器证书

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


在命令行工作期间。我正在使用Ant在构建完成后提交一个工件。经历过同样的问题。。。手动排除证书不起作用(詹金斯这样做很有趣)。将以下选项添加到svn命令:

--非交互式

--来自cmd运行的信任服务器证书:SVN列表URL 您将获得3个选项(r)弹出,(a)接受,(p)永久。 输入p。
此问题已为我解决

如果您在Windows服务器上使用svn with Jenkins,则必须使用同一Jenkins的Windows服务用户接受https证书。
因此,如果您的Jenkins服务以“MYSERVER\Administrator”的身份运行,您必须先使用此命令,当然只能使用一次:

runas/user:MYSERVER\Administrator“svn--用户名用户--密码列表”

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


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

我在这里还添加了一个PHP示例脚本:针对相同的问题。我没有手动签出,而是运行
svn listhttps://your.repository.url
从终端(Mac)/命令行(Win)获取永久接受证书的选项。在OS X上,我需要将sudo与svn list命令一起使用,否则选择(p)ermant似乎不起作用。我替换了svn://repos.server.url 具有https://repos.server.url,但我被要求接受SSL证书。这是自动脚本的最佳解决方案,通常不会有公认答案中列出的步骤那么奢侈。应该注意的是,盲目接受SSL证书基本上违背了SSL的全部目的,如果服务器向您发送的证书的主机名值与实际服务器主机名不同,则此操作不起作用。我与Andrey有相同的问题:如果名称不匹配,验证仍然失败。今晚在我们的SVN服务器上更新了我的证书,并获得了此结果。每个浏览器都信任证书。为什么SVN的客户会突然惊慌失措?使用您的技巧解决了我的问题。--信任服务器证书现在已弃用,不再像以前那样工作。等效参数为
--信任服务器证书失败=未知ca、cn不匹配、过期、尚未生效、其他
。你能解释一下你的代码是如何解决他的问题的吗?此外,您可能希望稍微改进布局(白间距)。这成功地帮助我在El Capitan上安装了svn。如果您以默认Windows NT服务用户(本地系统帐户,即“NT authority\System”)运行,则需要使用psexec以此Windows用户的身份打开cmd.exe并运行交互式svn.exe命令,如“svn—用户名您的svn用户列出您的SVNURL”,以便您可以接受svn服务器的SSL证书。之后,您可以运行“svn auth”检查存储的凭据缓存。请参阅