从netsh.exe获取证书

时间:2019-03-25 15:58:49

标签: c# .net https certificate window-server

我们有一个通过https公开的WCF服务。证书是通过

在控制台中配置的
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。看起来这仅在控制台中可用。我知道如何在证书存储区中找到证书,但是我不想做字符串魔术来从输出中提取证书哈希的问题,因为我必须考虑使用其他语言运行的系统。

是否知道如何通过代码访问Windows计算机上的SSL证书绑定?

0 个答案:

没有答案