Ich habe eine seltsame Anforderung. Ich versuche, mit einem in C# geschriebenen Server zu kommunizieren. Es sieht grundsätzlich so aus:Verbinden mit .NET Sslstream x.509-Socket mit Python oder Ruby oder Perl
SslStream sslStream = new SslStream(client.GetStream(), true,
ValidateServerCertificate,
SelectLocalCertificate);
sslStream.AuthenticateAsServer(_pushCert);
Ich habe auch Beispielcode in C#, die ein X509-Zertifikat verwendet und eine Verbindung zum Server herstellt. Ich habe auch das Passwort für die Datei cert.pfx.
Was ich tun möchte, ist eine Art Shell-Skript einrichten, die mit dem Socket verbinden kann, ein paar Bytes übertragen und die Antwort erhalten. (jede Sprache wirklich, obwohl ich auf Python oder Ruby oder Perl schaute)
Ich versuchte mit dem SSL-Wrapper von Python, aber ich bekomme einen Fehler, der besagt, ist kein bekannter Algorithmus für den Server/Client zu sprechen.
Beispiel meines Python-Code:
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(ss, ca_certs=CERT, ssl_version=ssl.PROTOCOL_SSLv23)
#Attempt connection to our server
try:
s.connect((HOST, PORT))
print s
except:
print 'ERROR Connecting'
sys.exit(0)
Für CERT versuchte ich ein paar verschiedenen filee: die PFX, und einige aus der PFX extrahierten OpenSSL.
Ich habe viele verschiedene Beispiele ausprobiert (Argumente für die ssl.wrap_socket). Ich kenne diese Zusammenhänge auch nicht wirklich.
Vielleicht könnte jemand hier eine Hand leihen?
Danke!
SslStream sslStream = new SslStream(client.GetStream());
sslStream.AuthenticateAsServer(_pushCert);
Dieser Server sendet _pushCert und erwartet nicht, dass der Kunde zurück, ein Zertifikat zu senden:
Der Server benötigt Zugriff auf den privaten Serverschlüssel, nicht auf den Client. –
Das von mir verwendete Cert (.pfx) stammt von einem C# -Client, der eine Verbindung mit diesem Server herstellt.Der Fehler, den ich bekomme (Ausnahme) ist: "Der Client und der Server können nicht kommunizieren, da sie keinen gemeinsamen Algorithmus besitzen" – Chris
AuthenticateAsServer verwendet standardmäßig SSL 3.0 oder TLS 1.0 und Ihr Python-Code scheint SSL 2 oder 3 zu verwenden. Also sollten sie * sich auf SSL 3.0 einigen (welches afaik eine Reihe von Algorithmen spezifiziert, die alle Implementierungen unterstützen müssen). Ich würde sagen, der einzige mögliche Fehlerpunkt hier ist das Zertifikat. Versuche es mit einem anderen. (Sie können ein selbstsigniertes Zertifikat mit [makecert.exe] (http: //msdn.microsoft.com/en-us/library/bfsktky3 \ (v = VS.100 \) .aspx) problemlos erstellen.) – dtb