Люди, помогите.
Настраиваю сервер на SSL утилитой:
httpcfg.exe set ssl -i 0.0.0.0:20020 -h 131A5B...1505 -f 2
То есть на любой IP адрес, порт 20020, сертификат сервера с хешем "131A5B...1505" (лежит в MY, подписан доверенным корневым в ROOT, все на LocalMachine), с проверкой сертификатов клиента (-f 2).
Из .net клиента обычным HttpWebRequest:
// Принимаем любой сертификат сервера
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
var request = (HttpWebRequest)WebRequest.Create("https://A.B.C.D:20020/");
request.ContentType = "application/xml";
request.ContentLength = memoryStream.Length;
request.Timeout = 300000;
request.Method = "POST";
request.KeepAlive = false;
request.Pipelined = false;
using (Stream stream = request.GetRequestStream())
stream.Write(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
Самое интересное, что все работает
Конфигурировал программно через HttpApi (HttpSetServiceConfiguration), комбинируя флаги и значения (DefaultCertCheckMode, DefaultFlags).
Результат один — клиент успешно обращается к серверу по SSL без сертификата.
А мне нужно сделать так, чтобы клиент мог обратиться к серверу ТОЛЬКО с собственным сертификатом.
Этот механизм мне пока не понятен, особенно, где как его сервер проверяет (копия клиентского сертификата лежит в хранилище..??)
Но даже простого отказа сервера, чтобы разобраться дальше, я не настроил....