.Net Core和jexus配置HTTPS服務

来源:https://www.cnblogs.com/CKExp/archive/2018/02/25/8469831.html
-Advertisement-
Play Games

花了幾天時間,看了好多篇博客,終於搞定了網站的HTTPS服務,藉此寫篇博客,來讓有需要的朋友少走彎路。 一、環境介紹 1、Linux下在Docker容器中部署好了一個網站,該網站需要通過外部提供程式訪問微軟的登錄平臺,利用的是OAuth2.0協議,因此要求必須要使用SSL服務,也使得網站必須要加入H ...


花了幾天時間,看了好多篇博客,終於搞定了網站的HTTPS服務,藉此寫篇博客,來讓有需要的朋友少走彎路。

一、環境介紹

  1、Linux下在Docker容器中部署好了一個網站,該網站需要通過外部提供程式訪問微軟的登錄平臺,利用的是OAuth2.0協議,因此要求必須要使用SSL服務,也使得網站必須要加入HTTPS服務。

  

 

  2、容器外,宿主機上通過jexus做埠轉發。(本沒打算用到jexus,但是看到情形不對,還是必須把它拉入進來)

  3、HTTPS服務需要證書,通過在騰訊雲上申請免費證書https://console.cloud.tencent.com/ssl,一天之內便可申請到,註意了!!!,假如說使用的和我一樣也是用的jexus,而騰訊雲提供的證書下載包裡面沒有jexus,只有IIS、Nginx、Apache..等等,

  

  我們是可以直接利用Nginx的兩個文件。第一個是crt文件,第二個是key文件。

  

  假如說你需要pfx結尾的文件那麼可以通過這兩個文件進行合成生成pfx文件可以通過命令:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

   將其中文件名更改為你的文件名即可。又或者度娘上也有將內容粘貼進去然後自動生成的網站,不要敲命令的,這就不再提供網站了。

 

二、全配置

   首先,我想說下,我在jexus中配置了HTTPS服務,在Docker容器中運行的網站中也配置好了HTTPS服務。如同此圖:

  

  可能有人會想,為什麼都要配置,只配置jexus就足夠了啊。當然,配置jexus是足夠了,但是我的網站裡面如果需要調用比如OAuth2.0協議支持的網站時,回掉地址總是會是用的HTTP協議,開發環境下沒問題,但是一旦弄上功能變數名稱或是IP地址訪問,那麼生成的就是HTTP的協議了。

  具體就是在此處.我通過配置好了微軟的外部提供程式,當點擊按鈕後將跳轉到微軟登錄頁面:

 

  跳轉後,當前登錄頁面的url中寫明瞭一些參數是我們想要的,比如redirect_url,此時我已經配置好了網站上的HTTPS協議,在沒有配上時,該處的redirect_url一直都是HTTP的

  好了,開始配置HTTPS服務:

  1、在.Net Core中配置HTTPS協議

    首先,這裡可能要搞清楚一下,jexus和網站之間的請求轉發,這也是我想弄清楚的一個問題,jexus埠轉發請求的時候是不是還是HTTPS協議的,還是說只是請求轉發,到了網站中又變成了HTTP了。就如這個模型,在jexus轉發之後,進入kestrel後是HTTP協議的還是HTTPS協議的? 希望各位博友幫忙,我沒有找到參考資料。

    

   我能做的就是在我嘗試在kestrel中不配置HTTPS協議下,訪問網站雖然也是能夠成功的,但是當通過微軟的第三方登錄成功後回調地址訪問網站時,便會是使用的HTTP協議,也就會出問題,與OAuth要求使用SSL的服務必須使用HTTPS協議相矛盾,也就促使著我必須要在kestrel中配置好HTTPS協議。具體配置如下:

  在Program.cs文件中,加入前面所合成的pfx文件,即可,這種情形下,要求我的每一個容器中的運行的網站都需要使用證書了。同時註意,在此處不能夠使用.UseUrls("https:"//:443")來設置HTTPS服務,在沒有配置.UseKestrel()下是會報錯的,望註意!。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using Identity.Api.Web.Core;

namespace Identity.Api
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                //.UseJexusIntegration()
                .UseKestrel(options =>
                {
                    options.Listen(IPAddress.Any, 1101, listenOptions =>
                    {
                        var certificate = new X509Certificate2("hdshopserver.pfx", "你的證書密碼");
                        listenOptions.UseHttps(certificate);
                    });
                })
                .UseStartup<Startup>()
                .Build();
    }
}

 

 

  2、在jexus上配置HTTPS協議(假如說用的不是jexus或是沒有用到jexus,則可跳過此處)

    首先,通過命令查看到我的jexus版本是5.8.3,是支持HTTPS的了。

    

    進入你的jexus配置文件夾,我用圖形表示更加直觀點:

     

    具體的jexus的各種文件功能不再介紹,此處只針對配置證書服務,需要查看可看http://blog.csdn.net/yang1982_0907/article/details/45155765

    我們可以在jws.conf中配置整個伺服器上的所有網站都令其使用HTTPS服務:

    

    也可在siteconf中配置你需要的單獨的網站中使用HTTPS服務:

    

    通過UseHttps=true和配置好前面所提到的兩個文件,jexus的HTTPS服務算是搞定了.然後可以通過https://功能變數名稱進行查看,假如說不能成功,可以在jexus文件夾下的log文件中查看信息,這很關鍵!!。

    在jexus的配置上還需要感謝@無語1994的幫助,剛配置時,用的是自己在伺服器上通過命令生成的證書,不管怎樣,都不能看到到網站頁面,然後通過使用騰訊雲上的證書,擺平!

   通過兩次配置後我的網站便可使用HTTPS服務了,也因此,在使用微軟的外部提供程式上登錄微軟第三方頁面也就沒問題了,可以正常回調顯示了。

   如想查看,可以訪問https://www.hdshop.xyz:1101/。通過登錄按鈕調用微軟登錄頁面。

三、個人總結

   在配置方面,走了不少彎路,首先是只是想到在網站中進行配置,但是嘗試起來發現,當我將jexus關閉後sh /usr/jexus/jws stop,也就是直接將網站面向外網,可以進行訪問成功。

  

  此時,每個容器中的網站都各自配置了HTTPS服務,但是想到這裡便會感覺每個網站都配置的話,有點冗餘,那麼直接在jexus上配置呢。當然可以,

  

  通過在jexus上配置完畢,去掉每個網站上各自配置的HTTPS服務,假如說一個網站不需要使用到諸如OAuth、微信支付等等要求安全性比較高的,那麼jexus上配置HTTPS服務也就足夠了,但是在使用到那些安全性要求後,自身網站也要配置起HTTPS服務。也就因此,我被困了好多天,最終的效果是:

   

 

四、留下問題求助

  第一個問題便是在之前提到的那張圖中:

  

  jexus和kestrel之間仍然是以什麼方式進行傳遞,我看到是利用的tcp,但是舉個例子,用戶訪問的URL是https://xxx.com進入jexus,服務轉交到kestrel,在kestrel中接收的是https://xxx.com還是http://xxx.com,還是說其他的方式。

   第二個問題便是在配置過程中,看到微軟提供的HTTP重定向到HTTPS的解決方案,意思是說我通過http訪問後會將http的訪問請求轉變成https的訪問請求嗎?也就是說支持http和https的兩種方式,是否?

 

2018-2-25,望技術有成後能回來看見自己的腳步

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...