Come specificare accettati i certificati per l'Autenticazione del Client in .NET SslStream
Domanda
Sto tentando di utilizzare .Net System.Di sicurezza.SslStream di processo lato server di un SSL/TLS stream con l'autenticazione del client.
Per eseguire la stretta di mano, sto usando questo codice:
SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);
Purtroppo, questo si traduce in SslStream la trasmissione di un CertificateRequest contenente il subjectnames di tutti i certificati nel mio CryptoAPI di Fiducia Archivio Principale.
Vorrei essere in grado di eseguire l'override di questo.Non è un'opzione per me, che richiede all'utente di installare o rimuovere certificati dall'Archivio Principale Attendibile.
Sembra che la SslStream utilizza SSPI/SecureChannel sotto, così se qualcuno sa come fare la stessa cosa con delle API, che sarebbe utile, anche.
Tutte le idee?
Soluzione
Non guardare come è attualmente possibile con l' .NET librerie.
Ho risolto utilizzando il Mono libreria di classi di implementazione del Sistema.Di sicurezza.SslStream, che dà un migliore accesso a sovrascrivere il server di comportamento durante la stretta di mano.
Altri suggerimenti
Ciò che il certificato di convalida è la convalida di tutti i certificati della catena.Per davvero fare ciò, è sufficiente contattare l'archivio principale di ciascuna di quelle cerficates.
Se questo non è qualcosa che si vuole che accada è possibile distribuire il proprio archivio principale a livello locale.
Non è la convalida di parte voglio cambiare.Il problema è che in una prima stretta di mano, il server trasmette un messaggio che vi informa il cliente che è necessaria l'autenticazione client (che è il CertificateRequest messaggio).Come parte di questo messaggio, il server invia i nomi dei CAs, che accetta, in qualità di emittenti del certificato client.Non è che l'elenco di cui al default, che contiene tutte le Radici Attendibili in negozio.
Ma se è possibile sostituire il certificato root store per una singola applicazione, che sarebbe probabilmente risolvere il problema.Che cosa vuoi dire?E se sì, come faccio a fare che?