Κοινή χρήση τεχνολογίας

Το C# εφαρμόζει ενσωματωμένη υπηρεσία ακρόασης HTTPS που βασίζεται σε exe και αναβαθμίζει από HTTP σε υπηρεσία παραθύρων back-end HTTPS

2024-07-12

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

Επειδή ο πελάτης πρέπει να αναβαθμίσει την αρχική υπηρεσία υποστήριξης HTTP σε μια υπηρεσία που υποστηρίζει https, επειδή η αρχική υπηρεσία HTTP υλοποιείται με βάση την ενσωματωμένη υπηρεσία ακρόασης HTTP της υπηρεσίας WINDOWS και δεν υποστηρίζει https, ούτε είναι όπως άλλες WebAPI που αναπτύσσονται στις υπηρεσίες IIS Το πιστοποιητικό HTTPS φορτώνεται απευθείας όπως η υπηρεσία, επομένως εδώ πρέπει να τροποποιήσετε την αρχική υπηρεσία ώστε να υποστηρίζει https και να εκτελέσετε ρυθμίσεις σύνδεσης θύρας HTTPS στο περιβάλλον διακομιστή, ως εξής:

(Σημείωση: Οι ακόλουθες λειτουργίες απαιτούν να έχετε ήδη πιστοποιητικό HTTPS.)

1. Εγκαταστήστε το πιστοποιητικό, κάντε διπλό κλικ στο αρχείο pfx και εγκαταστήστε το στο: "τοπικός υπολογιστής”–>“προσωπικός”;

2. Κάντε διπλό κλικ για άνοιγμαcrtΠιστοποιητικό, μπορείτε να δείτε (certhash) πληροφορίες σχετικά με τα δακτυλικά αποτυπώματα στις λεπτομερείς πληροφορίες.

3. Εκτελέστε σύνδεση θύρας (προεπιλεγμένη θύρα 443)

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

4. Υλοποίηση προγράμματος διακομιστή:

  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. }

Εάν αναφερθεί σφάλμα κατά τη διαδικασία δέσμευσης θύρας παραπάνω ή η προσθήκη αποτύχει, μπορείτε να ανατρέξετε στην ακόλουθη επεξεργασία:

1. Ελέγξτε εάν οι παράμετροι της εντολής netsh είναι σωστές.

2. Αποτυχία προσθήκης πιστοποιητικού SSL, σφάλμα: 1312 Η καθορισμένη περίοδος σύνδεσης δεν υπάρχει. Μπορεί να έχει τερματιστεί. Μέθοδος επεξεργασίας:

Πληκτρολογήστε WIN+R και πληκτρολογήστε mmc.exe, ως εξής:

    

Κάντε κλικ στο «OK» και θα εμφανιστεί η ακόλουθη διεπαφή ριζικού κόμβου κονσόλας:

Επιλέξτε File->Add/Delete Snap-in ή χρησιμοποιήστε απευθείας το πλήκτρο συντόμευσης ctrl+m για να εμφανιστεί το ακόλουθο αναδυόμενο παράθυρο και να εκτελέσετε τη λειτουργία:

Στη συνέχεια, μεταβείτε στο προσωπικό πιστοποιητικό εισαγωγής

Τέλος, συνδέστε το πιστοποιητικό SSL με τον αριθμό θύρας

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