<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .NET 部署 多域名 Https(SSL)通過代碼方式

        在上一個文章中,傳送門,給大家介紹了怎么在配置文件中使用 Kestrel 部署 Https,正好今天有小伙伴穩問到:可以通過代碼的方式實現 Kestrel 的 Https 的部署嗎?答案是肯定的,我們這次一樣去不是多個域名。

        在使用代碼實現中,我是主要使用到 ListenOptions.UseHttps,我們先看看官方文檔怎么說吧,不想看我的可以直接跳轉到官方文檔,傳送門


       

      ListenOptions.UseHttps

      將 Kestrel 配置為使用 HTTPS。

      ListenOptions.UseHttps 擴展:

      • UseHttps:將 Kestrel 配置為使用 HTTPS,采用默認證書。 如果沒有配置默認證書,則會引發異常。
      • UseHttps(string fileName)
      • UseHttps(string fileName, string password)
      • UseHttps(string fileName, string password, Action<HttpsConnectionAdapterOptions> configureOptions)
      • UseHttps(StoreName storeName, string subject)
      • UseHttps(StoreName storeName, string subject, bool allowInvalid)
      • UseHttps(StoreName storeName, string subject, bool allowInvalid, StoreLocation location)
      • UseHttps(StoreName storeName, string subject, bool allowInvalid, StoreLocation location, Action<HttpsConnectionAdapterOptions> configureOptions)
      • UseHttps(X509Certificate2 serverCertificate)
      • UseHttps(X509Certificate2 serverCertificate, Action<HttpsConnectionAdapterOptions> configureOptions)
      • UseHttps(Action<HttpsConnectionAdapterOptions> configureOptions)

      ListenOptions.UseHttps 參數:

      • filename 是證書文件的路徑和文件名,關聯包含應用內容文件的目錄。
      • password 是訪問 X.509 證書數據所需的密碼。
      • configureOptions 是配置 HttpsConnectionAdapterOptions 的 Action。 返回 ListenOptions。
      • storeName 是從中加載證書的證書存儲。
      • subject 是證書的主題名稱。
      • allowInvalid 指示是否存在需要留意的無效證書,例如自簽名證書。
      • location 是從中加載證書的存儲位置。
      • serverCertificate 是 X.509 證書。

      在生產中,必須顯式配置 HTTPS。 至少必須提供默認證書。

      下面要描述的支持的配置:

      • 無配置
      • 從配置中替換默認證書
      • 更改代碼中的默認值

      無配置

      Kestrel 在 http://localhost:5000 和 https://localhost:5001 上進行偵聽(如果默認證書可用)。

      從配置中替換默認證書

      Kestrel 可以使用默認 HTTPS 應用設置配置架構。 從磁盤上的文件或從證書存儲中配置多個終結點,包括要使用的 URL 和證書。

      架構的注意事項:

      • 終結點的名稱不區分大小寫。 例如,由于再也無法解析標識符“Families”,因此 HTTPS and Https 是等效的。
      • 每個終結點都要具備 Url 參數。 此參數的格式和頂層 Urls 配置參數一樣,只不過它只能有單個值。
      • 這些終結點不會添加進頂層 Urls 配置中定義的終結點,而是替換它們。 通過 Listen 在代碼中定義的終結點與在配置節中定義的終結點相累積。
      • Certificate 部分是可選的。 如果未指定 Certificate 部分,則使用 Certificates:Default 中定義的默認值。 如果沒有可用的默認值,則使用開發證書。 如果沒有默認值,且開發證書不存在,則服務器將引發異常,并且無法啟動。
      • Certificate 部分支持多個證書源。
      • 只要不會導致端口沖突,就能在配置中定義任何數量的終結點。

      證書源

      可以將證書節點配置為從多個源加載證書:

      • Path 和 Password 用于加載 .pfx 文件。
      • PathKeyPath 和 Password 用于加載 .pem/.crt 和 .key 文件。
      • Subject 和 Store 用于從證書存儲中加載。

      好了,羅嗦話說完了,我們抽取文檔的一部分進行實踐

      var builder = WebApplication.CreateBuilder(args);
      
      builder.WebHost.ConfigureKestrel(serverOptions =>
      {
          serverOptions.ListenAnyIP(5005, listenOptions =>
          {
              listenOptions.UseHttps(httpsOptions =>
              {
                  var localhostCert = CertificateLoader.LoadFromStoreCert(
                      "localhost", "My", StoreLocation.CurrentUser,
                      allowInvalid: true);
                  var exampleCert = CertificateLoader.LoadFromStoreCert(
                      "example.com", "My", StoreLocation.CurrentUser,
                      allowInvalid: true);
                  var subExampleCert = CertificateLoader.LoadFromStoreCert(
                      "sub.example.com", "My", StoreLocation.CurrentUser,
                      allowInvalid: true);
                  var certs = new Dictionary<string, X509Certificate2>(
                      StringComparer.OrdinalIgnoreCase)
                  {
                      ["localhost"] = localhostCert,
                      ["example.com"] = exampleCert,
                      ["sub.example.com"] = subExampleCert
                  };
      
                  httpsOptions.ServerCertificateSelector = (connectionContext, name) =>
                  {
                      if (name is not null && certs.TryGetValue(name, out var cert))
                      {
                          return cert;
                      }
      
                      return exampleCert;
                  };
              });
          });
      });

        上面的代碼一看就能懂,比較無奈的是官方文檔的 SSL 證書是從 證書存儲區 里獲取的,在實際應用中,明顯是不夠方便,最好是那種直接寫 證書路徑 和 密碼的,這樣才能一目了然嘛,而這里的關鍵就是 X509Certificate2 這個類了,可以看到,最終是通過檢索一個字典返回的,接受的就是這個 X509Certificate2 類,所以我們看看這個類到底是個什么東西,傳送門

        這里我們只關注構造函數,下面是官方文檔,或者直接 F12 進去看更為直接


       

      構造函數

      X509Certificate2()
      已過時。

      初始化 X509Certificate2 類的新實例。

      X509Certificate2(Byte[])

      使用來自字節數組的信息初始化 X509Certificate2 類的新實例。

      X509Certificate2(Byte[], SecureString)

      使用一個字節數組和一個密碼初始化 X509Certificate2 類的新實例。

      X509Certificate2(Byte[], SecureString, X509KeyStorageFlags)

      使用一個字節數組、一個密碼和一個密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(Byte[], String)

      使用一個字節數組和一個密碼初始化 X509Certificate2 類的新實例。

      X509Certificate2(Byte[], String, X509KeyStorageFlags)

      使用一個字節數組、一個密碼和一個密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(IntPtr)

      使用非托管句柄初始化 X509Certificate2 類的新實例。

      X509Certificate2(ReadOnlySpan<Byte>)

      用證書數據初始化 X509Certificate2 類的新實例。

      X509Certificate2(ReadOnlySpan<Byte>, ReadOnlySpan<Char>, X509KeyStorageFlags)

      使用證書數據、密碼和密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(SerializationInfo, StreamingContext)

      使用指定的序列化和流上下文信息初始化 X509Certificate2 類的新實例。

      X509Certificate2(String)

      使用證書文件名初始化 X509Certificate2 類的新實例。

      X509Certificate2(String, ReadOnlySpan<Char>, X509KeyStorageFlags)

      使用一個證書文件名、一個密碼和一個密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(String, SecureString)

      使用一個證書文件名和一個密碼初始化 X509Certificate2 類的新實例。

      X509Certificate2(String, SecureString, X509KeyStorageFlags)

      使用一個證書文件名、一個密碼和一個密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(String, String)

      使用一個證書文件名和一個用于訪問該證書的密碼初始化 X509Certificate2 類的新實例。

      X509Certificate2(String, String, X509KeyStorageFlags)

      使用一個證書文件名、一個用于訪問該證書的密碼和一個密鑰存儲標志初始化 X509Certificate2 類的新實例。

      X509Certificate2(X509Certificate)

      使用 X509Certificate 對象初始化 X509Certificate2 類的新實例。

       

        直接 F12 也貼出來吧,方便大伙查看

       

         帥氣的小伙伴可能已經發現了,里面就存在了一個 直接傳入 文件路徑 和 密碼 作為參數的構造函數,毫無疑問,它就是我們要找的?。?!下面我們直接看代碼:

      Program.cs

      builder.WebHost.ConfigureKestrel(serverOptions =>
      {
          serverOptions.ConfigureHttpsDefaults(listenOptions =>
          {
              listenOptions.SslProtocols = SslProtocols.Tls13;
          });
          serverOptions.ListenAnyIP(5209, listenOptions =>
          {
              listenOptions.UseHttps(httpsOptions =>
              {
                  var test1 = new X509Certificate2("cer\\test1.ysmc.net.cn_server.pfx", "密碼1");
                  var test2 = new X509Certificate2("cer\\test2.ysmc.net.cn_server.pfx", "密碼2");
                  var certs = new Dictionary<string, X509Certificate2>(
                      StringComparer.OrdinalIgnoreCase)
                  {
                      ["test1.ysmc.net.cn"] = test1,
                      ["test2.ysmc.net.cn"] = test2
                  };
      
                  httpsOptions.ServerCertificateSelector = (connectionContext, name) =>
                  {
                      if (name is not null && certs.TryGetValue(name, out var cert))
                      {
                          return cert;
                      }
      
                      return test1;
                  };
              });
          });
      });

       

        因為是配合了 YARP “食用”的,詳情可以查看我前面的文章,傳送門,所以不同的域名會反向代理到不同的網站上面,好了,文章到此結束,感謝大佬們的閱讀,謝謝!

      原文鏈接:http://www.rzrgm.cn/ysmc/p/16721268.html

      posted @ 2022-09-23 00:01  一事冇誠  閱讀(3105)  評論(7)    收藏  舉報
      主站蜘蛛池模板: 国产精品国产三级国产试看| 99久久免费精品色老| 国产精品中出一区二区三区| 精品超清无码视频在线观看| 精品国精品无码自拍自在线| 毛多水多高潮高清视频| 成人污视频| 亚洲欧洲日产国码AV天堂偷窥| 97人妻成人免费视频| 日本欧美大码a在线观看| 美女无遮挡免费视频网站| 噜妇插内射精品| 亚洲少妇一区二区三区老| 免费午夜无码片在线观看影院| 久久久无码精品午夜| 亚洲av影院一区二区三区| 成人国产精品中文字幕| 国自产拍偷拍精品啪啪模特| 蜜臀av入口一区二区三区| 国产成人精品午夜2022| 中国china露脸自拍性hd| 人妻教师痴汉电车波多野结衣| 粉嫩蜜臀av一区二区三区| 丁香婷婷无码不卡在线| 国产伦码精品一区二区| 久久国内精品一区二区三区| 强插少妇视频一区二区三区| 伊人久久精品一区二区三区| 久久精品国产亚洲av麻豆软件| 亚洲欧美一区二区成人片| 国产女人喷潮视频免费| 色琪琪丁香婷婷综合久久| 吉川爱美一区二区三区视频| 中文字幕第一页国产精品| julia无码中文字幕一区| 野花韩国高清电影| 亚洲顶级裸体av片| 免费人成视频在线| 日本中文字幕有码在线视频| 亚洲国产一区二区av| 国产网友愉拍精品视频手机|