我有一个客户端和服务器,它使用sslstream类进行通信并进行经过身份验证。
两者都使用RemoteCertificateValidationCallback来验证证书,如下所示。
SslStream^ sslStream = gcnew SslStream(
client->GetStream(), false,
gcnew RemoteCertificateValidationCallback(ValidateClientCertificate),
nullptr);
验证客户端证书方法:
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;
}
客户端工作正常,但是当服务器执行此功能时,我得到一个例外:对象引用未设置为对象的实例。
这意味着未设置一个或所有此对象(发件人,证书,链),因为服务器未收到客户端证书。
任何人都知道为什么会这样吗?
更多信息: