发送数字证书

本文关键字:数字证书 | 更新日期: 2023-09-27 18:11:04

我使用makecert工具来创建:

    自签名证书
  1. 使用自签名证书的服务器证书
  2. 使用自签名证书的客户端证书

然后在mmc的可信证书颁发机构部分安装自签名证书。

服务器证书和客户端证书安装在mmc的Personal部分。

然后我使用服务器证书在IIS中部署了一个web服务作为HTTP。

然后我有另一个使用web服务的应用程序。它发送带有web服务请求的客户端证书,如下所示:
public static void Main(string[] args)
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, "client.com", true);
            if (col.Count == 1)
            {
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
                ClientServices web_service = new ClientServices();
                web_service.ClientCertificates.Add(col[0]);
                try
                {
                    string check = web_service.CheckCertificate();
                    Console.WriteLine(check);
                }
                catch (WebException e)
                {
                    Console.WriteLine(e.Message.ToString());
                }
            }
            else
            {
                Console.WriteLine("The certificate was not found!");
            }
            Console.ReadKey();
        }

在服务器端,我像这样检查客户端证书:

[WebMethod]
        public string CheckCertificate()
        {
            string message;
            try
            {
                X509Certificate2 cert = new X509Certificate2(Context.Request.ClientCertificate.Certificate);                
                if (cert != null)
                {
                    message = cert.SerialNumber.ToString();
                }
                else
                {
                    message = "Error: No certificate was found!";
                }
            }
            catch (Exception e)
            {
                message = e.Message.ToString();
            }
            return message;
        }

每当我运行客户端应用程序,我得到以下错误信息:

请求被终止。无法创建SSL/TLS安全通道

我该如何解决这个问题?

发送数字证书

我找到凶手了。

我安装了WinHttpCertCfg工具,并授予了对证书私钥的访问权。

我使用的命令是:

WinHttpCertCfg.exe -g -c LOCAL_MACHINE'MY -s "<name of certificate>" -a EVERYONE