How can I achieve the equivalent of setting clientcertnegotiation = allow using netsh from the application using C # (without executing the command line).
netsh http add sslcert ipport=0.0.0.0:8000 certhash=2064a43f429fe97746ce0c1c9adcd4ea93415f6d appid={4dc3e181-e14b-4a21-b022-59fc669b0914} clientcertnegotiation=enable
The following code successfully adds a certificate
using (var manager = new ServerManager()) { var siteBindings = from s1 in manager.Sites from b1 in s1.Bindings where b1.Protocol.Equals("https") select new {SiteName = s1.Name, Binding = b1}; foreach (var siteBinding in siteBindings) { siteBinding.Binding.CertificateHash = cert.GetCertHash(); }
but running netsh http show sslcert will show that it disables the client certificate certificate
IP:port : 0.0.0.0:8000 Certificate Hash : 2064a43f429fe97746ce0c1c9adcd4ea93415f6d Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914} Certificate Store Name : MY 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
deleting and re-creating a binding has the same effect
source share