У нас есть служба WCF, доступная через https. Сертификат настраивается в консоли через
netsh http add sslcert ipport=0.0.0.0:<port> certhash={<thumbprint>} appid={<some GUID>}
Во время запуска я делаю это, чтобы проверить, настроено ли любое прослушивание сертификата для порта:
Process bindPortToCertificate = new Process();
bindPortToCertificate.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "netsh.exe");
var arguments= string.Format("http show sslcert ipport=0.0.0.0:{0}", httpsPort);
bindPortToCertificate.StartInfo.Arguments = arguments;
bindPortToCertificate.StartInfo.RedirectStandardOutput = true;
bindPortToCertificate.StartInfo.RedirectStandardError = true;
bindPortToCertificate.StartInfo.UseShellExecute = false;
bindPortToCertificate.StartInfo.CreateNoWindow = true;
bindPortToCertificate.Start();
bindPortToCertificate.WaitForExit();
var result = bindPortToCertificate.StandardOutput.ReadToEnd();
var resultError = bindPortToCertificate.StandardError.ReadToEnd();
if (!string.IsNullOrWhiteSpace(result) &&
result.Contains(httpsPort.ToString()))
С этим результатом:
IP:port : 0.0.0.0:54322
Certificate Hash : yyyyyyyyyyyyyyyyyyyy
Application ID : {xxxxxxxxxxxxxxxxx}
Certificate Store Name : (null)
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
Reject Connections : Disabled
Disable HTTP2 : Not Set
Disable QUIC : Not Set
Disable TLS1.3 : Not Set
Disable OCSP Stapling : Not Set
Я хотел бы выполнить некоторые проверки сертификата (действителен до, отозван и т. Д.), Но я не могу найти хороший API для доступа к информации о привязке. Похоже, это доступно только в консоли. Я знаю, как найти сертификат в хранилище сертификатов, но я не хочу использовать магию строк для извлечения хэша сертификата из выходных данных, поскольку мне нужно учитывать системы, работающие с другими языками.
Есть идеи, как получить доступ к привязкам SSL-сертификатов на компьютере Windows через код?