Flash SecureSocket und privater RSA-Schlüssel

8

Ich versuche, über SSL mit einem Server zu kommunizieren. Die PEM-Client-Datei besteht aus einem Zertifikat und einem privaten RSA-Schlüssel.

Ich habe es geschafft, sowohl das Zertifikat als auch den Schlüssel in binäre DER zu konvertieren. Ich lade das DER-Zertifikat erfolgreich auf SecureSocket (mit der Funktion addBinaryChainBuildingCertificate ), aber wenn ich versuche, eine Verbindung zum Server herzustellen, erhalte ich einen "Principal Mismatch" -Fehler. Wenn ich versuche, die oben genannte Funktion zu verwenden, um die DER-Taste zu laden, erhalte ich einen "falschen Parameter" -Fehler.

Ich nehme an, die "prinzipielle Nichtübereinstimmung" ist, weil ich den privaten Schlüssel nicht geladen habe. Aber ich sehe keine Funktion, um einen RSA-Schlüssel zu SecureSocket zu laden. Gibt es dafür eine Lösung? Muss ich mit dem Server nur mit einem Zertifikat kommunizieren, aber den Schlüssel aus der Gleichung entfernen?

BEARBEITEN:

Code:

%Vor%

Ergebnis:

%Vor%

Wenn ich die Zeile kommentiere:

//mSocket.addBinaryChainBuildingCertificate(key, true);

Ich bekomme:

%Vor%     
Bill Kotsias 03.07.2012, 16:58
quelle

1 Antwort

3

Erstens:

Der "prinzipielle Konflikt" zeigt an, dass der allgemeine Name des Zertifikats auf dem gesicherten Server nicht mit dem DNS-Namen übereinstimmt, zu dem Sie eine Verbindung herstellen.

In Anbetracht dessen, dass Sie eine Verbindung zu localhost (127.0.0.1) herstellen, wird es höchstwahrscheinlich eine Diskrepanz geben. Flash-Sockets sind besonders streng, wenn es um sichere Verbindungen geht, und es gibt keinen Mechanismus zum Überschreiben von Sicherheitsfunktionen im Gegensatz zu anderen Laufzeiten (z. B. .NET und Java). Folgendes muss zutreffen:

  1. Der gemeinsame Name des Zertifikats stimmt mit dem DNS-Namen überein (hier gibt es eine Lockerung für "Stern" -Zertifikate, d. h. ein Zertifikat für *.bob.com wird für mr.bob.com als gültig betrachtet)
  2. Das Zertifikat muss hinsichtlich des Ablaufs und der Vertrauenskette
  3. gültig sein

Zweitens:

Sie scheinen einige falsche Vorstellungen davon zu haben, wie Zertifikate funktionieren. Sie müssen keine Zertifikate mithilfe der Methode addBinaryChainBuildingCertificate() hinzufügen, wenn das Serverzertifikat von einer vertrauenswürdigen Stammzertifizierungsstelle ausgegeben wird, d. H. Das Zertifikat, mit dem das Serverzertifikat signiert wurde, befindet sich im lokalen Vertrauensspeicher des Zielgeräts.

Zur Veranschaulichung:

  • Ich habe ein Zertifikat für this.is.awesome.com auf meinem Server installiert und einen DNS-Eintrag, der this.is.awesome.com zur IP-Adresse meines Servers auflöst
  • Dieses Zertifikat wird von der Entrust L1C-Zertifizierungsstelle ausgestellt.
  • Das L1C-Zertifikat wird wiederum von der Root-Autorität Entrust 2048 ausgestellt.

Auf meinem PC habe ich die Root-Berechtigung "Entrust 2048" in meinem vertrauenswürdigen Stammzertifikatsspeicher installiert. Allerdings habe ich das L1C-Zertifikat nicht installiert. Wenn ich versuche, mich mit this.is.awesome.com zu verbinden, schlägt die Verbindung fehl, da das Serverzertifikat nicht gegen die L1C-Berechtigung validiert werden kann.

Wenn ich das DER-codierte L1C-Zertifikat mit addBinaryChainBuildingCertificate() hinzufüge, ist die Verbindung erfolgreich. Das Serverzertifikat wird anhand des L1C-Zertifikats validiert, das wiederum anhand des Root-Zertifikats 2048 validiert wird, das ein vertrauenswürdiges Stammzertifikat ist.

Zusammenfassend:

Ihre Verbindungsprobleme scheinen auf Ihren Versuch zurückzuführen zu sein, eine Verbindung zu localhost herzustellen. Fügen Sie Ihrer HOSTS-Datei einen Eintrag hinzu, der den Namen Ihres Zertifikats 127.0.0.1 zuordnet und dann eine Verbindung mit diesem Namen herstellt. Wenn dies fehlschlägt, überprüfen Sie die Issuer-Kette Ihres Zertifikats und fügen Sie die Kette der Aussteller hinzu, indem Sie für jedes ausstellende Zertifikat in der Kette einmal addBinaryChainBuildingCertificate() aufrufen. Das endgültige oder Stammzertifikat sollte als solches gekennzeichnet werden, indem true als zweiter Parameter an addBinaryChainBuildingCertificate()

übergeben wird     
sweetlilmre 21.11.2012, 05:56
quelle