La tua domanda è piuttosto poco chiara perché ogni connessione TLS è, per sua natura, bidirezionale: consente ai byte di scorrere in entrambe le direzioni. Io supponiamo che intendi le connessioni in cui sia il client che il server mostrano un certificato.
Sul lato client , il certificato del server viene accettato se si tiene tutto il seguente:
- Il certificato del server può essere validato , cioè messo alla fine di una catena di certificati, che inizia con una root attendibile , e tutti i nomi, le firme e varie le estensioni corrispondono lungo la catena.
- Lo stato di revoca di tutti questi certificati può essere verificato come "non revocato" con informazioni sufficientemente aggiornate (ottenute da risposte CRL e / o OCSP).
- Il nome del server previsto , ovvero il nome visualizzato nell'URL utilizzato dal client, viene visualizzato nel certificato del server (nell'estensione
Subject Alt Name
, come per RFC 2818 ).
Per impostazione predefinita, il codice client .NET si baserà sul set di root attendibili valido per l'account con cui viene eseguito il codice client; questa è una fusione degli archivi certificati "root" per "utente corrente", "macchina locale" e "impresa".
Sul lato server , il certificato del client può essere convalidato da IIS. In tal caso, IIS ha due modalità:
-
clientCertificateMappingAuthentication
: il certificato client è validato rispetto all'insieme di root attendibili del server; la CA di emissione (quella che ha immediatamente firmato il certificato client) deve far parte dell'archivio NTAuth aziendale; e quindi l'UPN viene estratto dal certificato client e cercato nel server di Active Directory locale. La parte relativa all'archivio "NTAuth" è dove puoi limitare i certificati client.
-
iisClientCertificateMappingAuthentication
: IIS fa il lavoro, non il server AD (ad es. è quello che fai se il server non fa parte di un dominio). Dopo la convalida con le root attendibili, IIS può eseguire un "mapping one-to-one" in cui un certificato client sarà accettato solo se è identico bit-a-bit a un certificato registrato in IIS e quindi mappato a un'identità specifica .
Esistono molte opzioni di configurazione. E puoi sovrascrivere a livello di codice la maggior parte delle parti del processo. Ad esempio, vedi questa pagina per come configurare sul server una classe personalizzata per la convalida dei certificati client ; con una classe del genere, puoi fare tutto ciò che desideri (ma attenzione, puoi anche fare cose molto deboli, come fidarti del certificato sul valore nominale senza alcuna convalida).