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%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:
*.bob.com
wird für mr.bob.com
als gültig betrachtet) 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:
this.is.awesome.com
auf meinem Server installiert und einen DNS-Eintrag, der this.is.awesome.com
zur IP-Adresse meines Servers auflöst 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()
Tags und Links ssl flash actionscript-3 private-key