c# 自动安装X509证书\windows安装X509证书\端口绑定ssl\服务端开启ssl

证书可以购买或者使用openssl.exe工具生成。
一.
首先我这里使用openssl.exe生成自认证证书
openssl.exe genrsa -des3 -out private-rsa.key 1024
openssl.exe req -new -x509 -key private-rsa.key -days 3650 -out public-rsa.cer
openssl.exe pkcs12 -export -name “www.laocj.com” -in public-rsa.cer -inkey private-rsa.key -out user-rsa.pfx

重要之处!!
-密码设6位
-证书名称,填写域名或者ip,客户端访问时用域名或ip
-证书安装位置,两个位置都要安装
—本地计算机》个人》注册表
—本地计算机》受信任的根证书颁发机构》注册表
双击.pfx后缀文件安装

二.
证书安装正确后,cmd使用以下命令把证书与端口绑定.

删除端口证书绑定
netsh http delete sslcert ipport=0.0.0.0:8181
查看端口证书绑定
netsh http show sslcert
添加端口证书绑定 appid程序唯一id 双击.cer后缀文件 详细信息里面查看指纹certhash
netsh http add sslcert ipport=0.0.0.0:8181 certhash=82a438c70e657ff8988fd7f5d9458cc02753c114 appid={3cdebb12-f6d5-4997-a4c2-be4fdc553c01}

三.
常见问题
1.端口证书绑定是提示:会话已丢失啥的,
是因为证书没有安装到本地计算机》个人》注册表,安装即可。

2.客户端wss连接时提示错误:RemoteCertificateNameMismatch,远程证书名称不匹配,
是因为证书的名称和wss请求的地址不同导致的,
即生成证书时名称用了ip,wss则需要用ip连接wss:192.168.1.1:4433,
生成证书时名称用了域名,wss则需要用域名连接wss:www.laocj.com:4433

2.客户端wss连接时提示错误:RemoteCertificateChainErrors,远程证书链错误,
是因为证书没有安装到本地计算机》受信任的根证书颁发机构》注册表,安装即可。

3.我还遇到过一种情况,服务端用HttpListener做监听时,第一次用wss连,连接不上,需要先用https在浏览器访问一次那个地址…

下面是c#自动加载安装证书并绑定到指定端口的代码

//var certPort = "443";
//var certName = "192.168.13.16";
//var certPath = @"F:\证书\openssl-0.9.8k_WIN32\bin\user-rsa.pfx";
//var certPwd = "111111";
private void X509Certificate(string certPath,string certPwd,string certName,string certPort)
        {
            X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
            store.Open(OpenFlags.MaxAllowed);
            X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName,
               certName, false);
            if (certs.Count == 0 || certs[0].NotAfter < DateTime.Now)
            {
                X509Certificate2 certificate =
                 new X509Certificate2(certPath, certPwd,
                 X509KeyStorageFlags.MachineKeySet |
                 X509KeyStorageFlags.Exportable |
                 X509KeyStorageFlags.PersistKeySet);
                X509Store storeMy = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                storeMy.Open(OpenFlags.ReadWrite);
                storeMy.Remove(certificate);
                storeMy.Add(certificate);
                storeMy.Close();
                X509Store storeRoot = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
                storeRoot.Open(OpenFlags.ReadWrite);
                storeRoot.Remove(certificate);
                storeRoot.Add(certificate);
                storeRoot.Close();

                ProcessStartInfo psi = new ProcessStartInfo();
                psi.CreateNoWindow = true;
                psi.UseShellExecute = false;
                psi.FileName = "netsh";
                psi.Arguments = $"http delete sslcert ipport=0.0.0.0:{certPort}";
                Process proc = Process.Start(psi);
                proc.WaitForExit();
                psi.Arguments = $"http add sslcert ipport=0.0.0.0:{certPort}" +
                    $" certhash={certificate.Thumbprint}" +
                    $" appid={{{Guid.NewGuid().ToString()}}}";
                proc = Process.Start(psi);
                proc.WaitForExit();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值