Berbagi teknologi

C# mengimplementasikan layanan mendengarkan HTTPS tertanam berbasis exe dan meningkatkan dari layanan Windows back-end HTTP ke HTTPS

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Karena pelanggan perlu mengupgrade layanan backend HTTP asli ke layanan yang mendukung https, karena layanan HTTP asli diimplementasikan berdasarkan layanan mendengarkan HTTP bawaan dari layanan WINDOWS, dan tidak mendukung https, juga tidak seperti lainnya WebAPI disebarkan di IIS. Sertifikat HTTPS dimuat langsung seperti layanan, jadi di sini Anda perlu memodifikasi layanan asli untuk mendukung https dan melakukan pengaturan pengikatan port HTTPS pada lingkungan server, sebagai berikut:

(Catatan: Operasi berikut mengharuskan Anda sudah memiliki sertifikat HTTPS.)

1. Instal sertifikat, klik dua kali file pfx, dan instal ke: "komputer lokal”–>“pribadi”;

2. Klik dua kali untuk membukacrtSertifikat, Anda dapat melihat informasi terkait sidik jari (certhash) di informasi rinci;

3. Lakukan pengikatan port (port default 443)

netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable

4. Implementasi program server:

  1. using System;
  2. public class HttpService
  3. {
  4. public MyHttpServer()
  5. {
  6. System.Net.HttpListener httpListener = new System.Net.HttpListener();
  7. httpListener.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous;
  8. httpListener.Prefixes.Add("https://*:8000/"); // 支持https
  9. httpListener.Start();
  10. new System.Threading.Thread(new System.Threading.ThreadStart(delegate
  11. {
  12. while (true)
  13. {
  14. try
  15. {
  16. System.Net.HttpListenerContext httpListenerContext = httpListener.GetContext();
  17. new System.Threading.Thread(new System.Threading.ParameterizedThreadStart((input) =>
  18. {
  19. System.Net.HttpListenerContext ctx = (System.Net.HttpListenerContext)input;
  20. System.Net.HttpListenerRequest request = ctx.Request;
  21. string pram = request.QueryString["Data"];//Get入参
  22. string responseMessage = string.Empty;//返回值
  23. if (!string.IsNullOrEmpty(pram))
  24. {
  25. //Get入参
  26. pramOrg = pram;
  27. pram = System.Web.HttpUtility.UrlDecode(pram);
  28. }
  29. //POST入参
  30. if (request.HttpMethod == "POST")
  31. {
  32. //处理业务请求
  33. StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
  34. pram = reader.ReadToEnd();
  35. reader.Close();
  36. reader.Dispose();
  37. }
  38. #region 业务处理
  39. try
  40. {
  41. //业务处理
  42. responseMessage = "业务结果";
  43. }
  44. catch (Exception ex)
  45. {
  46. //异常处理
  47. responseMessage = ex.Message;
  48. }
  49. #endregion 业务处理
  50. #region 返回给调用者
  51. //输出类型
  52. httpListenerContext.Response.ContentType = "text/html; charset=UTF-8";
  53. //返回状态
  54. httpListenerContext.Response.StatusCode = 200;
  55. //设置授权,尝试解决Jquery跨域问题
  56. //httpListenerContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
  57. //httpListenerContext.Response.Headers["Access-Control-Allow-Methods"] = "GET,POST";
  58. //httpListenerContext.Response.Headers["Access-Control-Max-Age"] = "1000";
  59. try
  60. {
  61. //输出界面内容
  62. if (!string.IsNullOrEmpty(responseMessage))
  63. {
  64. //返回文本内容
  65. using (StreamWriter writer = new StreamWriter(httpListenerContext.Response.OutputStream))
  66. {
  67. writer.Write(responseMessage);
  68. }
  69. }
  70. }
  71. catch
  72. {
  73. //刷新太快异常,不做处理
  74. }
  75. #endregion 返回给调用者
  76. })).Start(httpListenerContext);
  77. }
  78. catch
  79. { }
  80. }
  81. })).Start();
  82. }
  83. }

Jika kesalahan dilaporkan selama proses pengikatan port di atas, atau penambahan gagal, Anda dapat merujuk ke pemrosesan berikut:

1. Periksa apakah parameter perintah netsh sudah benar;

2. Gagal menambahkan sertifikat SSL, kesalahan: 1312 Sesi login yang ditentukan tidak ada. Ini mungkin telah dihentikan. Metode pemrosesan:

Keyboard WIN+R dan masukkan mmc.exe, sebagai berikut:

    

Klik 'OK', dan antarmuka simpul akar konsol berikut akan muncul:

Pilih File->Tambah/Hapus Snap-in, atau langsung gunakan tombol pintasan ctrl+m untuk memunculkan pop-up berikut dan melakukan operasi:

Lalu pergi ke sertifikat impor pribadi

Terakhir ikat sertifikat SSL ke nomor port

netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable