SslStream su TCP Server non riesce a convalidare il certificato client con RemoteCertificateNotAvailable
-
03-07-2019 - |
Domanda
Questa domanda riguarda la risoluzione di un errore SslPolicyError.RemoteCertificateNotAvailable
.
Ho sviluppato un server TCP con SSLStream e un client TCP per l'altra estremità.
Autentico il server con:
sslStream.BeginAuthenticateAsServer
Autentico il client con:
sslStream.BeginAuthenticateAsClient
Sto caricando il mio certificato cliente da Trusted Publishers - Local Machine
.
Entrambi sono in esecuzione sullo stesso computer.
Ho provato a caricare il certificato client dai file .cer e .pfx anziché dall'archivio di editori attendibili. Ma il callback del validatore del certificato client (remoto) del server fallisce trovando che SslPolicyErrors
ha un errore RemoteCertificateNotAvailable
.
Soluzione
Il collegamento non è stato trovato, ma c'è un problema che posso individuare con la dichiarazione:
" Ho caricato il mio certificato cliente da Trusted Publishers "
I certificati client in genere risiedono in un archivio personale per un account utente. Lo stesso vale per i certificati Server (probabilmente avranno un OID Scopo previsto diverso associato a loro, sebbene - "Autenticazione client" e "Autenticazione server"). Penso che sarebbe strano avere un certificato con una chiave privata disponibile nel negozio Trusted Publishers, credo.
Se fai doppio clic su un certificato client o server in CertMgr.msc, dovresti visualizzare un " Questo certificato ha una chiave privata " messaggio verso il basso.
In caso contrario, hai solo mezza coppia di chiavi: la crittografia e l'autenticazione richiedono la chiave privata. Il certificato server richiede una chiave privata all'estremità del server e il certificato client richiede una chiave privata all'estremità del client.