Skip to main content
 首页 » 编程设计

c#之asp.net,使用服务器证书制作httpwebrequest C#

2024年01月01日44duanxz

抱歉,这是我的第一篇文章,我会尽量描述得尽可能...

我在转换 HTTPWebRequest 以访问需要证书的 HTTPS 网站时遇到问题。在我的本地开发机器上,我可以使用 CAC 读卡器使用我的 CAC 卡上的客户端证书来创建对站点的 Web 请求。当我必须将此代码推送到我们的开发/生产服务器以访问此站点时,我的问题就出现了。当我在服务器上时,我无法读取我的 CAC 卡,但我确实有一个我可以在 IIS 6.0 上使用的服务器证书。

能否在服务器上获取客户端的CAC卡证书?有什么店可以看吗?或者是否有服务器商店可供查看?

我不知道使用此服务器证书的步骤,我是否必须对此进行编码或使用我的 IIS 服务器管理器来启用它。这是我在本地开发机器上运行的代码。我添加了 ServerCertficateValidationCallback 以在开发服务器上进行测试。

   protected void Page_Load(object sender, EventArgs e) 
   {  
        ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate); 
 
        ServicePointManager.MaxServicePointIdleTime = 300000; 
 
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://url"); 
        request.Accept = "text/xml, */*"; 
        request.Method = "GET"; 
        request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-us"); 
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; .NET CLR 3.5.30729;)"; 
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 
        request.Credentials = CredentialCache.DefaultCredentials; 
        request.KeepAlive = false; 
 
        X509Certificate myCert = null; 
        X509Store store = new X509Store("My"); 
 
        store.Open(OpenFlags.ReadOnly); 
 
        int i = 0; 
        foreach (X509Certificate2 m in store.Certificates) 
        { 
             if (i == 0) 
                myCert = m; 
             i++; 
        } 
 
        if (myCert != null) 
        { 
             request.ClientCertificates.Add(myCert); 
        } 
 
        //take the response and create the xml document to parse 
        HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
        StreamReader reader = new StreamReader(response.GetResponseStream()); 
        string str = reader.ReadToEnd(); 
 
        ... 
        } 
 
        public static bool ValidateServerCertificate(object sender, X509Certificate certificate,X509Chain chain, SslPolicyErrors sslPolicyErrors) 
        { 
            //certificate is in here 
            if (sslPolicyErrors == SslPolicyErrors.None) 
               return true; 
 
            sslPE = "SSLPolicyErros: " + sslPolicyErrors; 
 
            return false; 
        } 

是否有人熟悉部署过程,以使用我向其发送请求的网站信任的服务器证书?我希望所有从我们站点访问该站点的用户(我们的站点需要 CAC 身份验证)使用服务器证书。除非有人更好地了解使用来自其 CAC 卡的用户客户端证书。我无法将所有这些放在一起,我们将不胜感激。

请您参考如下方法:

您的 (CAC) 证书的根 ca(颁发者)必须受到您的服务器的信任。将根 ca 证书添加到服务器的 windows 证书存储的受信任的根证书颁发机构部分,然后重新启动 iis。