2010-08-13 10 views
8

Ich habe seit mehr als 1 Monat mit einem SSL-Problem gekämpft.Client SSL mit selbst signierter CA funktioniert nicht

Wir haben mit openssl unsere eigenen CA-, Server- und Client-Zertifikate generiert. Wir haben auch enable „SSLRequire“ auf dem Apache-Webserver (in .htaccess dies kann falsch sein), was bedeutet, dass jemand versucht, durch https auf dem Server zu verbinden muss ein gültiges Zertifikat

Der Schritt präsentieren sich wie folgt dar ;

  • die CA generieren Schlüssel
  • die CSR-CA generieren
  • Zeichen der CA CSR mit dem CA-Key

so ist, dass wir unsere eigene CA haben, die verwendet, um unsere Server- und Client-Zertifikate zu signieren .

nächster Schritt

  • Server-Schlüssel
  • CSR-Server erzeugen
  • Zeichen Server CSR mit CA Key

So haben wir unsere Server-Zertifikat & Server private Schlüssel, die wir installieren erfolgreich auf dem Server

Als nächstes wir

  • erzeugen Client-Schlüssel
  • generieren Client CSR
  • Zeichen Client CSR mit CA Key

Wir das Client-Zertifikat für unsere Nutzer dann verteilen zusammen mit dem CA-Zertifikat. Beide wurden in ihren Browsern installiert.

Beim Versuch, eine Verbindung herzustellen, haben wir den Fehler "Peer erkennt und vertrauen der CA, die Ihr Zertifikat ausgestellt hat. ".

Wir haben festgestellt, dass das selbstsignierte CA-Zertifikat nicht auf dem Server installiert ist. Normalerweise zeigt der Server dem Gerät, das versucht, sich mit ihm zu verbinden, eine Liste der vertrauenswürdigen CA an, und das Gerät muss ein Zertifikat senden, das von einem der vom Server dargestellten CAs signiert wurde. Da jedoch unser selbstsigniertes CA-Zertifikat nicht auf dem Server installiert war, konnte der Browser ein Zertifikat bereitstellen, das vom -Server akzeptiert werden konnte.

Also gingen wir auf die Installation der CA-Zertifikat auf dem Server - Systemsteuerung Hsphere.

Wir haben den Inhalt des CA-Zertifikats und kopiert es in der „Certificate Authority File“ Textbereich auf dem Server und der Server würde es jedes Mal nicht akzeptieren

„SSL-Konfiguration Verschiedene Schlüssel und das Zertifikat aktualisieren Failed“ beschweren

Das CA-Zertifikat wurde von selbst signiert. Wie kann der Server sagen, dass das Zertifikat und der Schlüssel unterschiedlich sind?

Wir haben auch versucht, den Inhalt sowohl der CA-Zertifikatsdatei als auch der CA-Schlüsseldatei in das "Certificate Authority File" -Textarea zu kopieren, aber das würde auch nicht funktionieren.

Wie gesagt, wir haben damit seit mehr als einem Monat gekämpft. Wenn jemand helfen kann, wäre das sehr geschätzt. Wenn wir für den Service bezahlen müssen, lassen Sie es uns bitte wissen.

Vielen Dank im Voraus.

+0

Sie können versuchen, serverfault.com, eher Admins zu finden, die Hsphere verwendet haben. – sarnold

Antwort

13

(Vielleicht https://serverfault.com/ wäre ein besserer Ort für diese Frage.)

Hier sind ein paar Optionen, die Sie in der Apache-Konfiguration verwenden können (ich bin nicht sicher, wie dies zu Ihrer Konfiguration Platte abgebildet wird).

SSLCertificateFile  /etc/ssl/certs/host.pem 
SSLCertificateKeyFile /etc/ssl/private/host.key 
SSLCACertificatePath /etc/ssl/certs/trusteddir 
#SSLCACertificateFile /etc/ssl/certs/trustedcert.pem 
#SSLCADNRequestFile  /etc/ssl/certs/advertisedcas.pem 

SSLCertificateFile und SSLCertificateKeyFile sind die grundlegenden Anforderungen SSL auf Ihrem Server zu aktivieren.

Da Sie die Clientzertifikatauthentifizierung benötigen, müssen Sie einen der folgenden Werte konfigurieren: SSLCACertificatePath (für ein Verzeichnis) oder SSLCACertificateFile (für eine Datei), um anzugeben, welche CAs Ihnen vertrauen möchten. Dies sollten Dateien im PEM-Format sein. Jedes darin enthaltene Zertifikat wird als vertrauenswürdig angesehen (obwohl es möglicherweise die CA-Grundbeschränkung benötigt, kann ich mich nicht erinnern, das ist ziemlich Standard, wenn Sie selbst ein Stammzertifizierungsstellenzertifikat selbst erzeugt haben).

Zusätzlich können Sie Zertifikate in eine SSLCADNRequestFile setzen. Dies sollte nicht erforderlich sein, da es automatisch aus den Zertifikatsdirektiven SSLCACertificatePath oder SSLCACertificateFile ausgefüllt wird. Wenn Sie jedoch mehr Kontrolle über die Liste der CAs wünschen, die der Server bewirbt, kann er dies akzeptieren. Nur um zu verdeutlichen, ist dies nicht das, was die Vertrauenswürdigkeit von Client-Zertifikaten verwaltet, sondern genau das, worauf der Server hinweist, dem er vertrauen kann, so dass Sie immer noch SSLCACertificatePath oder SSLCACertificateFile benötigen. Vielleicht haben Sie "Certificate Authority File" Option in Ihrem Konfigurationsfenster steuert das und nicht eine der anderen beiden Optionen.

Eine Möglichkeit, dies zu debuggen ist dies einer der Befehlszeile zu tun:

echo | openssl s_client -showcerts -connect www.your.host.example:443 

Diese die Zertifikatskette zuerst präsentieren Liste sollte (es wäre gut für sie die gesamte Kette präsentieren bis zum CA , wie manche Kunden es manchmal zu brauchen scheinen, soweit ich mich erinnere). Dann sollte es die Zertifizierungsstellen auflisten, die es für die Clientzertifikatauthentifizierung akzeptieren möchte, oder Kein Clientzertifikat CA-Namen gesendet andernfalls (in diesem Fall gibt es ein Problem mit einer der oben genannten Anweisungen). Dies gibt Ihnen zumindest einen Hinweis darauf, wie SSLCADNRequestFile oder SSLCACertificatePath/SSLCACertificateFile konfiguriert wurden (obwohl es die letzten beiden ist, die wichtig sind).

+1

Pity Ich habe nur +1 zu geben: PEM, CA grundlegende Einschränkungen, Klärung Server-Trust vs Client-Trust und die openssl s_client -showcerts zu spezifizieren, jeder verdient einen eigenen Punkt. – sarnold