Comment utiliser le certificat de rappel dans SslStream.AuthenticateAsClient méthode?
Mon C#.NET connexion SSL fonctionne quand je importer le certificat manuellement dans IE (Outils/Options Internet/Contenu/Certificats), mais comment puis-je charger le certificat par le code?
Voici mon code:
TcpClient client = new TcpClient(ConfigManager.SSLSwitchIP, Convert.ToInt32(ConfigManager.SSLSwitchPort));
SslStream sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
null
);
sslStream.AuthenticateAsClient("Test");
Le code ci-dessus fonctionne très bien si je importer mon fichier de certificat manuellement dans Internet Explorer. Mais si je retirer mon certificat d'IE et d'utiliser le code suivant à la place, j'obtiens l'Authentification exception:
sslStream.AuthenticateAsClient("Test", GetX509CertificateCollection(), SslProtocols.Default, false);
et ici est le " GetX509CertificateCollection méthode :
public static X509CertificateCollection GetX509CertificateCollection()
{
X509Certificate2 certificate1 = new X509Certificate2("c:\\ssl.txt");
X509CertificateCollection collection1 = new X509CertificateCollection();
collection1.Add(certificate1);
return collection1;
}
Que dois-je faire pour charger mon certificat dynamiquement?
OriginalL'auteur losingsleeep | 2012-09-29
Vous devez vous connecter pour publier un commentaire.
De construire sur owlstead réponse, voici comment j'ai utiliser un seul certificat d'autorité de certification et une coutume de la chaîne dans la vérification de rappel pour éviter de Microsoft store.
J'ai pas compris comment utiliser cette chaîne (
chain2
ci-dessous) par défaut tels qu'il n'est pas nécessaire pour le rappel. C'est, de l'installer sur le socket ssl et la connexion ne "fonctionne". Et j'ai pas compris comment l'installer de telle sorte que son passé dans la fonction de rappel. C'est, je dois construire la chaîne pour chaque invocation de la fonction de rappel. Je pense que ce sont architectural défauts .Net, mais j'ai peut-être raté quelque chose d'évident.Le nom de la fonction n'a pas d'importance. Ci-dessous,
VerifyServerCertificate
est le même rappel queRemoteCertificateValidationCallback
. Vous pouvez également l'utiliser pour leServerCertificateValidationCallback
dansServicePointManager
.OriginalL'auteur jww
Un rapide sur Google m'a indiqué un morceau de texte à partir de Microsoft
SslStream
classe.Donc simplement de mettre en œuvre le délégué et faire la vérification de vous-même.
Vous avez mis en œuvre la fonction de rappel et quand il est revenu
true
il n'a toujours pas de travail? Vraiment?Oui. Ce que j'ai compris , quand je l'appelle "AuthenticateAsClient" méthode .NET ne handshake SSL à l'aide des touches "Autorités de Certification Racine approuvées" (Internet Explorer/Outils/Options Internet/Contenu/Certificats) qui est appelée la RACINE lorsque nous avons envie de l'ajouter dans le code. Et si le besoin de la clé publique n'existe pas là .NET du programme de contrôle va dans le "RemoteCertificateValidationCallback" méthode de rappel avec quelques erreurs, et si je vérifie le certificat distant manuellement et renvoie "true" dans la méthode, pas de problème comme "AuthenticationException" va se produire. Quelles sont donc les règles de vérification?
Eh bien, c'est à vous. Vous devriez au moins vérifier une chaîne à un certificat de confiance (mais que la chaîne peut être un cert de long). Ensuite, il serait sage de vérifier que la date actuelle est à l'intérieur de la période de validité. Puis il y a la touche usages et d'autres éléments étendus. À cet égard, il est une solution, mais pas une solution de facilité.
OriginalL'auteur Maarten Bodewes
J'ai écrit une autre méthode pour ajouter mon certificat de Autorités de Certification Racine approuvées (racine) avant de tenter de s'authentifier en tant que client via SSLStream objet:
Et puis:
Il fonctionne très bien sans les avertissements ou des erreurs. Mais la base de la question reste encore sans solution:
Comment puis-je utiliser un certificat pour s'authentifier en tant que client sans l'installer dans Windows?
OriginalL'auteur losingsleeep