J'ai une exigence étrange. J'essaie de communiquer avec un serveur écrit en C#. Il ressemble à ceci essentiellement:Connexion à .NET Sslstream x.509 socket avec Python ou Ruby ou Perl
SslStream sslStream = new SslStream(client.GetStream(), true,
ValidateServerCertificate,
SelectLocalCertificate);
sslStream.AuthenticateAsServer(_pushCert);
J'ai aussi un exemple de code en C# qui utilise un certificat X509 et se connecte au serveur. J'ai aussi le mot de passe pour le fichier cert.pfx.
Ce que je voudrais faire est de configurer un type de script shell qui peut se connecter au socket, transmettre quelques octets et recevoir la réponse. (J'ai vraiment essayé Python ou Ruby ou Perl)
J'ai essayé d'utiliser le wrapper SSL de Python, mais j'ai une erreur indiquant qu'il n'y a pas d'algorithme connu pour que le serveur/client parle.
Exemple de mon code Python:
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)
Pour J'ai essayé CERT quelques différents FILEE: le .pfx, et quelques extraits du .pfx en utilisant OpenSSL.
J'ai également essayé plusieurs exemples différents (arguments pour le fichier ssl.wrap_socket). Je ne connais pas vraiment ces connexions non plus.
Peut-être que quelqu'un ici pourrait donner un coup de main?
Merci!
Le serveur doit avoir accès à la clé privée du serveur et non au client. –
Le certificat que j'ai utilisé (.pfx) provenait d'un client C# qui se connectait à ce serveur.L'erreur que je reçois toujours (Exception) est: "Le client et le serveur ne peuvent pas communiquer, car ils ne possèdent pas d'algorithme commun" – Chris
AuthenticateAsServer utilise SSL 3.0 ou TLS 1.0 par défaut, et votre code Python semble utiliser SSL 2 ou 3. Donc, ils * devraient * être d'accord sur SSL 3.0 (qui afaik spécifie un ensemble d'algorithmes que toutes les implémentations doivent supporter). Je dirais que le seul point d'échec possible est le certificat. Essayez avec un autre. (Vous pouvez facilement créer un certificat auto-signé en utilisant [makecert.exe] (http: //msdn.microsoft.com/en-us/library/bfsktky3 \ (v = VS.100 \) .aspx).) – dtb