svn akzeptiert mein ungültiges Zertifikat nicht


7
  • Ich habe einen Server, auf dem Apache ausgeführt wird, mit einem selbstsignierten Zertifikat (dem Server), an das Subversion angeschlossen ist
  • Zum Auschecken oder Aktualisieren aus dem Repo ist ein Benutzername erforderlich.
  • Ich habe eine Kasse aus dem Repo, die ich bei einem Cron-Job auf zwei Servern aktualisieren möchte: Server und Client. Keiner der beiden Cron-Jobs funktioniert aus demselben Grund (ich habe auf beiden fast das gleiche Setup, aber der Client ist einfacher).
  • Die folgenden sind auf dem Client, wo es nur einen Login gibt: root (ich weiß, bitte ersparen Sie mir die Lächerlichkeit)
  • Sie sind beide Gentoo, wenn Sie denken, dass das wichtig ist

Error

Error validating server certificate for 'https://server:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
 - The certificate hostname does not match.
Certificate information:
 - Hostname: Tom
 - Valid: from Sun, 01 Feb 2009 03:51:25 GMT until Tue, 01 Feb 2011 03:51:25 GMT
 - Issuer: Fake Company, NYC, New York, US
 - Fingerprint: fingerprint here

   (R)eject, accept (t)emporarily or accept (p)ermanently? 
svn: OPTIONS of 'https://server/svn/repo': Server certificate verification failed: certificate issued for a different hostname, issuer is not trusted (https://server)

Ich weiß das alles. Aus diesem Grund habe ich alle Anleitungen befolgt, damit svn das Zertifikat automatisch akzeptiert:

/root/.subversion/servers

[global]
ssl-authority-files = /root/scripts/server.crt

/root/scripts/server.crt

-----BEGIN CERTIFICATE-----
MIIDejCCAmICCQDibo0twimetjANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJV
UzERMA8GA1UECBMITmV3IFlvcmsxDDAKBgNVBAcTA05ZQzEjMCEGA1UEChMaSGFw
et al
-----END CERTIFICATE-----

/root/scripts/backup.sh

svn up /BACKUP/checkouts/server/ --username tom

Und der Befehl läuft gut als root (kein sudo, direkt als root) ohne Aufforderung zur Bestätigung eines Zertifikats (es hatte zuvor, aber ich habe p gewählt, um dauerhaft zu akzeptieren).

Weiß jemand, warum mein Skript nicht funktioniert? Es hat mich in den letzten Monaten geärgert.

** Bearbeiten: ** Ich habe ein bisschen gebraucht, um darauf zurückzukommen, und ich habe Davids Rat befolgt, aber es funktioniert immer noch nicht. Jetzt ist der Fehler:

Error validating server certificate for 'https://server:443':
 - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: server
 - Valid: from Sat, 20 Jun 2009 14:10:45 GMT until Mon, 20 Jun 2011 14:10:45 GMT
 - Issuer: Fake Company, New York, US
 - Fingerprint: 1a:c6:9c:eb:62:9e:e1:05:d9:d3:ac:01:f4:35:dc:00:14:48:e5:39
(R)eject, accept (t)emporarily or accept (p)ermanently? svn: OPTIONS of 'https://server/svn/folder': Server certificate verification failed: issuer is not trusted (https://server)

Antworten:


5
Fehler beim Überprüfen des Serverzertifikats für 'https: // server : 443':
 - Das Zertifikat wird nicht von einer vertrauenswürdigen Stelle ausgestellt. Verwenden Sie die
   Fingerabdruck zur manuellen Validierung des Zertifikats!
 - Der Hostname des Zertifikats stimmt nicht überein.
Zertifikatsinformationen:
 - Hostname: Tom
 - Gültig: von So, 01. Februar 2009, 03:51:25 GMT bis Di, 01. Februar 2011, 03:51:25 GMT
 - Emittent: Fake Company, NYC, New York, USA
 - Fingerabdruck: Fingerabdruck hier

Das Problem ist, dass Ihr Zertifikat nicht mit dem Hostnamen Ihres Servers übereinstimmt. Sie benötigen das CN-Feld im Zertifikat, das Ihrem Hostnamen entspricht. In Ihrem Fall lautet Ihr Hostname "Server" und die CN Ihres Zertifikats "Tom". Sie müssen Ihr Zertifikat mit dem richtigen CN-Wert neu generieren.


Tut mir leid, es hat so lange gedauert, aber ich habe es versucht und es funktioniert immer noch nicht = /
Tom Ritter

Was sagt Ihr Zertifikat jetzt?
David Pashley

Ah, ich sehe, Sie haben die Frage aktualisiert. Jetzt besteht Ihr Problem darin, dass Sie ein selbstsigniertes Zertifikat verwenden. Sie können dies entweder nur für diese Verbindung oder für alle Zeiten akzeptieren. Wenn Sie "p" drücken, sollte es einfach funktionieren.
David Pashley

1
Wenn Sie möchten, dass der Cron-Job funktioniert, müssen Sie die Kaufabwicklung wahrscheinlich einmal von Hand durchführen und das Zertifikat akzeptieren. Dann sollte es funktionieren.
David Pashley

2

Eine Sache zu beachten - viele Cron-Jobs werden mit einem anderen HOME ausgeführt (z. B. / etc / crontab (cron.daily etc) setzt HOME = /), sodass es eine andere .subversion-Datei gibt. Wir haben uns hier und da gebissen und es gab einen / Subversionsbaum ohne das akzeptierte Zertifikat. Das korrekte Einstellen von HOME im Cron-Skript hat das Problem behoben.


1

Haben Sie versucht zu Satz ssl-trust-default-cazu true? Ich weiß nicht, ob sich Ihr Problem lösen lässt, aber ich habe diese Empfehlung bei Versionskontrolle mit Subversion- Buch gesehen.

Viele OpenSSL-Installationen verfügen auch über einen vordefinierten Satz von Standardzertifizierungsstellen, denen nahezu universell vertraut wird. Setzen Sie die ssl-trust-default-caVariable auf, damit der Subversion-Client diesen Standardberechtigungen automatisch vertraut true.


0

Es gibt einige Lösungen, um das Problem zu umgehen, die mir in den Sinn kommen. Zunächst können Sie in Apache einen neuen virtuellen Webdav-Host erstellen, der dieses Zertifikat nicht verwendet (einfaches http). Alternativ können Sie die Zugriffsmethode svn + ssh und die Authentifizierung mit privatem Schlüssel für den Cron-Job verwenden (dies kann ein Sicherheitsrisiko darstellen).

Ich würde diesen Weg nur gehen, wenn Sie die Probleme mit dem Zertifikat nicht beheben können oder nicht an den https-Webdav-Zugriff gebunden sind.


Ich konnte HTTP nur für das interne Netzwerk (wieder) aktivieren und benötige immer noch HTTPS für das externe Netzwerk. Daran hatte ich nicht gedacht. Aber ich hoffe immer noch, dass dies funktioniert, da ich auf irgendeine Weise etwas falsch mache.
Tom Ritter

0

Die Antworten auf diese Frage halfen mir, die Teile zusammenzusetzen, die zur Lösung eines ähnlichen Problems erforderlich waren. Dies dient nur dazu, die Teile für andere Linux-Noobs wie mich vorab zusammenzubauen.

um das Skript zu testen, das Sie über cron verwenden

sudo su

anstelle dessen, was ich benutzte

sudo -s

Andernfalls sind das Home-Verzeichnis und andere Variablen nicht so, wie es von cron (root) ausgeführt wird.

Zweitens verwenden Sie nicht "--no-auth-cache". Wenn Sie diesen Schalter hinzufügen, können Sie das Zertifikat niemals dauerhaft akzeptieren.

Mit den oben genannten Informationen konnte ich das Skript einmal über sudo su ausführen, das Zertifikat dauerhaft akzeptieren und nachfolgende Cron-Läufe funktionierten.


0

Sie können einfach:

echo t | svn update --username yourusername--password yourpassword --no-auth-cache /local.repository/path 2>/dev/null


0

Fügen Sie dies in Ihr Skript ein:

# svn up /BACKUP/checkouts/server/ --username tom –config-dir /xyz/zyx

config-dir kann alles sein, wo Sie die Zertifikatinformationen speichern möchten. Führen Sie es manuell aus und akzeptieren Sie das Zertifikat dauerhaft mit "p", bevor Sie es vom Cron ausführen.

Einmal akzeptiert, lassen Sie es durch cron laufen und ich glaube, es wird wie ein Zauber wirken.

Es gibt noch eine weitere Option (wenn die vorherige Option nicht zufällig funktioniert), die in anderen Umgebungen riskant ist, aber in Ihrer Umgebung sollte sie in Ordnung sein. Verwenden Sie das Skript ungefähr so:

# svn up /BACKUP/checkouts/server/ --username tom --non-interactive –-trust-server-cert

Dadurch wird das Zertifikat einfach akzeptiert, ohne sich darum zu kümmern. Dies wird in der Produktionsumgebung nicht empfohlen, da dies ein Sicherheitsrisiko darstellt. In Ihrem Fall können Sie es jedoch verwenden, wenn Sie ein selbst erstelltes Zertifikat verwenden.

Quelle: GeekRide

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.