Comment spécifier les certificats acceptés pour l'authentification client dans .NET SslStream

StackOverflow https://stackoverflow.com/questions/53824

  •  09-06-2019
  •  | 
  •  

Question

J'essaie d'utiliser la classe .Net System.Security.SslStream pour traiter le côté serveur d'un flux SSL/TLS avec l'authentification client.

Pour effectuer la poignée de main, j'utilise ce code :

SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);

Malheureusement, cela entraîne la transmission par SslStream d'une CertificateRequest contenant les noms de sujets de tous les certificats de mon magasin racine de confiance CryptoAPI.

J'aimerais pouvoir contourner cela.Ce n'est pas une option pour moi d'exiger que l'utilisateur installe ou supprime des certificats du Trusted Root Store.

Il semble que SslStream utilise SSPI/SecureChannel en dessous, donc si quelqu'un sait comment faire l'équivalent avec cette API, cela serait également utile.

Des idées?

Était-ce utile?

La solution

Il ne semble pas que cela soit actuellement possible en utilisant les bibliothèques .NET.

Je l'ai résolu en utilisant l'implémentation de la bibliothèque de classes Mono de System.Security.SslStream, qui donne un meilleur accès pour remplacer le comportement des serveurs lors de la poignée de main.

Autres conseils

La validation des certificats valide tous les certificats de la chaîne.Pour ce faire, il suffit de contacter le magasin racine de chacun de ces certificats.

Si ce n'est pas quelque chose que vous souhaitez, vous pouvez déployer votre propre magasin racine localement.

Ce n'est pas la partie validation que je souhaite changer.Le problème réside dans la poignée de main initiale, le serveur transmet le message informant le client que l'authentification du client est requise (c'est-à-dire le message CertificateRequest).Dans le cadre de ce message, le serveur envoie les noms des AC qu'il acceptera comme émetteurs du certificat client.C'est cette liste qui contient par défaut toutes les racines de confiance du magasin.

Mais s'il est possible de remplacer le magasin racine des certificats pour une seule application, cela résoudrait probablement le problème.C'est ce que tu veux dire ?Et si oui, comment faire ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top