Вам просто нужно загрузить сертификат, например, из файла и использовать этот конкретный сертификат для аутентификации.Если вы хотите сделать это на стороне сервера соединения:
var certificate = new X509Certificate2("cert.pfx");
sslStream.AuthenticateAsServer(certificate);
И на стороне клиента:
X509Certificate certificate = new X509Certificate2("cert.pfx");
var certCollection = new X509CertificateCollection(new[] { certificate });
sslStream.AuthenticateAsClient(targetHost, certCollection, protocols, checkRevocation);
Если сертификаты находятся в файлах, защищенных паролем, есть второй параметрконструктору X509Certificate2
, который принимает пароль.И, конечно, вы, вероятно, хотите использовать разные сертификаты для клиентов и сервера.
Обновление:
Так что, похоже, ваша проблема в том, что ваши сертификаты не принимаютсяпотому что вы позволяете .NET выполнять стандартную проверку (которая включает проверку хоста).Вам просто нужно предоставить RemoteCertificateValidationCallback
вашему SslStream
конструктору .Затем вы можете сделать все проверки, которые вы хотите (или нет) внутри этого.Например, вот валидатор, который будет слепо принимать любой сертификат:
private bool DefaultCertificateValidationHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors)
{
return true;
}