У меня есть клиент и сервер, которые используют класс sslstream для взаимодействия и аутентификации.
Оба используют RemoteCertificateValidationCallback для проверки сертификата, как показано ниже.
SslStream^ sslStream = gcnew SslStream(
client->GetStream(), false,
gcnew RemoteCertificateValidationCallback(ValidateClientCertificate),
nullptr);
Validateметод сертификата клиента:
static bool ValidateClientCertificate(
Object^ sender,
X509Certificate^ certificate,
X509Chain^ chain,
SslPolicyErrors sslPolicyErrors)
{
// check certificate hash
if( certificate->GetCertHashString()->Equals("cert hash") ) {
Console::Write( "oK\n" );
return true;
}
Console::Write(" ERROR\n");
Console::WriteLine("[-] Hash doesn't match");
// Do not allow this client to communicate with unauthenticated servers.
return false;
}
Клиентская сторона работает нормально, но когда сервер выполняет эту функцию, я получаю исключение: Ссылка на объект не установлена на экземпляр объекта .
Это означает, что один или все эти объекты (отправитель, сертификат, цепочка) не установлены, поскольку сервер не получает сертификат клиента.
Кто-нибудь знает, почему это происходит?
Дополнительная информация:
- Оба приложения работают с правами администратора.
- Оба сертификата находятся в своих хранилищах (My) и подписаны доверенным корневым центром сертификации.