Получить сертификат из netsh.exe

#c# #.net #https #certificate #window-server

#c# #.net #https #сертификат

Вопрос:

У нас есть служба 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) amp;amp; 
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 с помощью кода?

Комментарии:

1. Смотрите проект GitHub : github.com/rpetz/SharpNetSH

2. @jdweng: Я пробовал это. Он просто анализирует выходные данные, а затем создает объект со свойствами dynamci. К сожалению, они локализованы, инструмент