C#中实现https的双向认证

时间:2023-03-10 02:43:08
C#中实现https的双向认证

1.  把浏览器中的证书导出为cer文件。

2.   代码如下:

  1. using System;
  2. using System.Net;
  3. using System.IO;
  4. using System.Security.Cryptography.X509Certificates;
  5. using System.Text;
  6. using System.Net.Security;
  7. public partial class About : System.Web.UI.Page
  8. {
  9. protected void Page_Load(object sender, EventArgs e)
  10. {
  11. // string url = "https://192.168.6.120/";
  12. ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCallback;
  13. //Uri uri = new Uri("https://www.baifubao.com/");
  14. Uri uri = new Uri("https://192.168.6.120/");
  15. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
  16. X509Certificate cer = new X509Certificate("F:\\csharp2.cer");
  17. request.ClientCertificates.Add(cer);
  18. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  19. string encoding = response.ContentEncoding;
  20. if (encoding == null || encoding.Length < 1)
  21. {
  22. encoding = "UTF-8"; //默认编码
  23. }
  24. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
  25. Response.Write(reader.ReadToEnd());
  26. //Console.Write(reader.ReadToEnd());
  27. response.Close();
  28. }
  29. public static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
  30. {
  31. if (sslPolicyErrors == SslPolicyErrors.None)
  32. return true;
  33. return false;
  34. }
  35. }