У меня есть один сервер и три клиента, на которых служба Windows работает с правами локальной системы. Клиенты и сервер проходят взаимную аутентификацию с использованием SSL через TCP и сертификатов (я использую класс SSLStream C++\CLI http://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.90).aspx#Y1124)
Проблема в том, что мне нужно три сертификата (по одному на каждого клиента), потому что я аутентифицирую хосты. Теперь я хочу аутентифицировать службу Windows, а не хост, чтобы я мог распространять один и тот же сертификат для каждого хоста.
Кто-нибудь знает, как это можно сделать?
--- РЕДАКТИРОВАТЬ 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;
}
.pfx
файл? - person Jon   schedule 17.01.2012