我有一台服务器和三个客户端,其中 Windows 服务以本地系统权限运行。客户端和服务器使用 SSL over TCP 和证书进行相互身份验证(我使用 SSLStream 类 C++\CLI http://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs .90).aspx#Y1124 )
问题是我需要三个证书(每个客户端一个),因为我正在验证主机。现在我想验证Windows 服务而不是主机,这样我就可以为每个主机分发相同的证书。
有谁知道怎么做?
--- EDIT 1 ---- 给你一个我想做的例子。在每个 Microsoft Office 副本中都部署了一个证书,用于通过加密/身份验证通道与 Microsoft 服务器进行通信。
- 解决了 -
正如乔恩所说,我的问题是 SslStream 类执行包含主机名的标准验证。我提供了一个自定义 RemoteCertificateValidationCallback,现在它可以工作了。
bool ValidateServerCertificate( Object^ sender, X509Certificate^ certificate, X509Chain^ chain, SslPolicyErrors sslPolicyErrors ) {
Console::Write("[+] Validating server certificate: ");
// 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;
}