SslStream на TCP-сервере не может проверить сертификат клиента с помощью RemoteCertificateNotAvailable
-
03-07-2019 - |
Вопрос
Этот вопрос касается решения проблемы SslPolicyError.RemoteCertificateNotAvailable
.
Я разработал TCP-сервер с SSLStream и TCP-клиент для другого конца. Р>
Я аутентифицирую сервер с помощью:
sslStream.BeginAuthenticateAsServer
Я аутентифицирую клиента с помощью:
sslStream.BeginAuthenticateAsClient
Я загружаю свой сертификат клиента из Надежные издатели - локальный компьютер
.
Оба работают на одном компьютере.
Я попытался загрузить сертификат клиента из файлов .cer и .pfx, а не из хранилища доверенных издателей. Но обратный вызов средства проверки сертификата клиента (удаленного) сервера не удается, обнаружив, что SslPolicyErrors
имеет ошибку RemoteCertificateNotAvailable
.
Решение
Ссылка не появилась, но есть проблема, которую я могу заметить с помощью оценки:
" я загрузил свой сертификат клиента от доверенных издателей "
Клиентские сертификаты обычно хранятся в личном хранилище для учетной записи пользователя. То же самое с сертификатами сервера (хотя, вероятно, с ними будет связан другой OID по назначению) - «Проверка подлинности клиента» и «Проверка подлинности сервера»). Думаю, было бы странно иметь сертификат с закрытым ключом в магазине доверенных издателей.
Если дважды щелкнуть сертификат клиента или сервера в CertMgr.msc, вы должны увидеть " Этот сертификат имеет закрытый ключ " сообщение внизу.
Если нет, у вас есть только половина пары ключей - для шифрования и аутентификации требуется закрытый ключ. Сертификат сервера нуждается в закрытом ключе на стороне сервера, а сертификат клиента - в закрытом ключе на стороне клиента.