C#中實現https的雙向認證


問題:

【SSL】WebClient 請求 https 頁面出錯:未能創建 SSL/TLS 安全通道

代碼:

 /**
        post 表單的方式發送請求數據
        **/
        public String sendMessage(String postUrl, NameValueCollection postData)
        {
            ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);

            //WebClient web = new WebClient();
            //byte[] respData = web.UploadValues(postUrl, "POST", postData);
            //String resp = Encoding.UTF8.GetString(respData);

            String resp;
            using (SecureWebClient client = new SecureWebClient())
            {
                byte[] respData = client.UploadValues(postUrl, "POST", postData);
                resp = Encoding.UTF8.GetString(respData);
            }
            return resp;
        }

        /// <summary>
        /// 總是接受 認證平台 服務器的證書
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="certificate"></param>
        /// <param name="chain"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public static bool CheckValidationResult(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors errors)
        {   // 總是接受 認證平台 服務器的證書
            return true;
        }

        /// <summary>
        /// https雙向認證
        /// </summary>
        public class SecureWebClient : WebClient
        {
            /// <summary>
            /// 加載證書
            /// </summary>
            /// <param name="address"></param>
            /// <returns></returns>
            protected override WebRequest GetWebRequest(Uri address)
            {
                HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
                var cer = new X509Certificate2(Config.GetValue("MinSheng_custPriPfxPath"), Config.GetValue("MinSheng_custPriPfxPwd"));
                request.ClientCertificates.Add(cer);
                return request;
            }
        }

注:

當調用 X509Certificate2 的時候,會提示找不到文件而報錯。

發現文件也是存在的,就是這個函數讀取不了,網上查了一下,發現是IIS的程序池配置問題,雲服務器上的自動加載配置文件設為Fasle的,只要在你網站的程序池中,設置為True就解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM