Überprüfung des Serverzertifikats fehlgeschlagen: Der Aussteller ist nicht vertrauenswürdig


69

Beim Ausführen eines Ziels eines ANT-Skripts wird der folgende Fehler angezeigt. Fehlermeldung, dass "Überprüfung des Serverzertifikats fehlgeschlagen ist". Bitte helfen Sie, dieses Problem zu beheben. Ich arbeite in 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

Antworten:


149

Können Sie versuchen, svn checkoutIhre URL einmal manuell über die https://yoururl/trunk C:\ant-1.8.1\Test_CheckoutBefehlszeile auszuführen und das Zertifikat zu akzeptieren?

Oder wie @AndrewSpear unten sagt

Anstatt manuell auszuchecken, führen Sie es svn list https://your.repository.urlüber Terminal (Mac) / Befehlszeile (Win) aus, um die Option zu erhalten, das Zertifikat dauerhaft zu akzeptieren

svn wird Sie um Bestätigung bitten. akzeptiere es dauerhaft.

Danach sollte dies für nachfolgende Anfragen von ant script funktionieren.


Ich habe hier auch ein Beispielskript für PHP hinzugefügt: php.net/manual/en/function.svn-auth-set-parameter.php#104300 für das gleiche Problem.
Powtac

29
Anstatt manuell auszuchecken, starte ich einfach svn list https://your.repository.urlüber Terminal (Mac) / Befehlszeile (Win), um die Option zu erhalten, das Zertifikat dauerhaft zu akzeptieren.
Andrew

1
Unter OS XI musste sudo mit dem Befehl svn list verwendet werden, andernfalls schien die Auswahl von (p) ermanent nicht zu funktionieren.
Locke

Ich habe svn : //repos.server.url durch https : //repos.server.url ersetzt, nur als ich aufgefordert wurde, das SSL-Zertifikat zu akzeptieren.
Stefan

52

Führen Sie "svn help commit" für alle verfügbaren Optionen aus. Sie werden sehen, dass es eine Option gibt, die für das Akzeptieren von Serverzertifikaten verantwortlich ist:

--trust-server-cert : Unbekannte SSL-Serverzertifikate ohne Aufforderung akzeptieren (aber nur mit --non-interactive)

Fügen Sie es Ihren svn-Befehlsargumenten hinzu, und Sie müssen svn nicht manuell ausführen, um es dauerhaft zu akzeptieren.


3
Dies ist die beste Lösung für automatisierte Skripte, die normalerweise nicht den Luxus der in der akzeptierten Antwort beschriebenen Schritte haben. Es sollte jedoch beachtet werden, dass das blinde Akzeptieren von SSL-Zertifikaten im Grunde den gesamten Zweck von SSL zunichte macht und Sie somit für MitM-Angriffe öffnen kann.
Ken

29
Dies funktioniert nicht, wenn der Server Ihnen ein Zertifikat mit einem Hostnamen sendet, der vom tatsächlichen Server-Hostnamen abweicht
Andrey Sboev,

1
Ich habe das gleiche Problem wie Andrey: Die Validierung schlägt immer noch fehl, wenn der Name nicht übereinstimmt.
Tim Büthe

1
Ich habe heute Abend meine Zertifikate auf unserem SVN-Server aktualisiert und diese erhalten. Das Zertifikat wird vom Browser als vertrauenswürdig eingestuft. Warum flippt der SVN-Client plötzlich aus? Ich habe deinen Trick benutzt, um mein Problem zu lösen.
TekiusFanatikus

1
--trust-server-cert ist jetzt veraltet und funktioniert nicht mehr wie früher. Der äquivalente Parameter ist --trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid,other. Siehe svnbook.red-bean.com/de/1.7/svn.ref.svn.c.commit.html
cedd

13

Ich würde nicht verwenden:

svn checkout

Nur um die Serverauthentifizierung zu autorisieren, verwende ich lieber:

svn list https://your.repository.url

Hier werden Sie aufgefordert, auch die Authentifizierung durchzuführen.

Wenn dies erforderlich ist, um eine Autorisierung für einen Benutzer zu erhalten, der sich nicht anmelden kann, führen Sie Folgendes aus:

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

Dies hat mir erfolgreich geholfen, svn auf El Capitan zu installieren.
Coolio2654

3

Wenn Sie svn mit Jenkins auf einem Windows Server verwenden, müssen Sie das https-Zertifikat mit demselben Windows-Dienstbenutzer von Jenkins akzeptieren.
Wenn Ihr Jenkins-Dienst als "MYSERVER \ Administrator" ausgeführt wird, müssen Sie diesen Befehl vor allen anderen verwenden, natürlich nur einmal:

runas / user: MYSERVER \ Administrator "svn - Benutzername Benutzer - Passwort Passwortliste https: // myserver / svn / REPO "

svn fordert Sie auf, das Zertifikat zu akzeptieren und im richtigen Pfad zu speichern .

Danach können Sie svn in jenkins job direkt in einem Windows-Batch-Befehlsschritt verwenden.


1

Die anderen Antworten funktionieren bei mir nicht. Ich versuche, die Kommandozeile in Jenkins zum Laufen zu bringen. Sie benötigen lediglich die folgenden Befehlszeilenargumente:

--non-interactive

--trust-server-cert



0

während der Kommandozeile funktioniert. Ich verwende Ant, um ein Artefakt nach Abschluss des Builds festzuschreiben. Ich habe das gleiche Problem erlebt ... Manuell mit Ausnahme des Zertifikats hat es nicht funktioniert (Jenkins ist auf diese Weise lustig). Fügen Sie Ihrem svn-Befehl folgende Optionen hinzu:

--nicht interaktiv

--trust-server-cert


0

Von cmd run: SVN List URL erhalten Sie 3 Optionen: (r) Auswerfen, (a) Akzeptieren, (p) dauerhaft. Geben Sie p ein. Dieses Problem wurde für mich behoben


0
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;

2
Können Sie erklären, wie Ihr Code sein Problem löst? Möglicherweise möchten Sie auch das Layout (Weißabstand) etwas verbessern.
Volker Stolz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.