Je fais une négociation SSL3 en utilisant un SslStream, mais, malgré tous mes efforts, le SslStream n'envoie jamais de certificat client en mon nom. Voici le code:Impossible d'envoyer un certificat client via SslStream
SSLConnection = new System.Net.Security.SslStream(SSLInOutStream, false, new System.Net.Security.RemoteCertificateValidationCallback(AlwaysValidRemoteCertificate), new System.Net.Security.LocalCertificateSelectionCallback(ChooseLocalCertificate));
X509CertificateCollection CC = new X509CertificateCollection();
CC.Add(Org.BouncyCastle.Security.DotNetUtilities.ToX509Certificate(MyLocalCertificate));
SSLConnection.AuthenticateAsClient("test", CC, System.Security.Authentication.SslProtocols.Ssl3, false);
puis je AlwaysValidRemoteCertificate juste retourner vrai, et ChooseLocalCertificate retourner l'élément zeroth du tableau.
Le code a probablement l'air un peu bizarre parce que le projet est un peu bizarre, mais je pense que ce n'est pas le cas ici. La négociation SSL se termine. Le problème est qu'au lieu d'envoyer un message de certificat en mon nom (dans le processus de négociation), avec le certificat codé ASN.1 (MyLocalCertificate), le SslStream envoie un numéro d'alerte SSL 41 (pas de certificat), puis continue. Je le sais par reniflage de paquets. Une fois la négociation terminée, le SslStream marque IsAuthenticated comme vrai, IsMutuallyAuthenticated comme faux et son membre LocalCertificate est null. J'ai l'impression qu'il me manque probablement quelque chose d'assez évident ici, donc des idées seraient appréciées. Je suis un novice en matière de SSL, et ce projet est hors des sentiers battus, donc je suis un peu perdu.
P.S. 1: La routine My ChooseLocalCertificate est appelée deux fois au cours de la négociation, et renvoie un certificat valide (pour autant que je sache), non nul à chaque fois.
P.S. 2: SSLInOutStream est ma propre classe, pas un NetworkStream. Comme je l'ai dit, cependant, la poignée de main se déroule normalement normalement, donc je doute que ce soit le coupable ... mais qui sait?
Veuillez fournir un lien vers la documentation de l'API. – erickson