Contents ...
udn網路城邦
偵錯階段使用Https
2025/05/09 10:34
瀏覽78
迴響0
推薦0
引用0

這是在某一天開發網站的社群帳號登入功能時發生的事情,因為碰到要介接的Http服務要求redirect回網站時須採用 Https ,因此在開發階段需啟用SSL,即Visual Studio須在debug階段就啟用SSL。

往常開發網站或API時,只需要考慮Http即可,因為Https通常是直接設定在IIS上即可,故開發過程中通常是可以忽略的,相對較少的情境才會需要在debug開發時就需要Https;要使用Https也不難,就是要知道設定在哪就好。

因為當時電腦環境更換使用新的windows 11、是以才剛重灌過,除此之外,Visual Studio也取代過去的2019、而改使用新版的Visual Studio 2022(版本:17.5.4),開發專案也使用.net 6、而非習慣的.net Framework 4.5~4.7等。

是以剛開始打開專案屬性時,由於介面更換花了不少時間尋找設定所在位置,在此給大家一個建議:直接搜尋關鍵字「debug」或「url」(搜尋關鍵字Https或SSL是找不到的),而後即可在「偵錯」的區塊中找到設定「開啟 debug 啟動設定檔UI」。

Visual Studio會跳出設定視窗,可在IIS Express的設定檔中找到「使用SSL」設定,將其勾選後,「應用程式SSL URL」就會出現對應的Https網址,且該網址無法修改。

另外設定下方的「啟用匿名驗證」與「啟用Windows驗證」兩者,需勾選其中之一,若兩者皆不勾選,在啟動IIS Express進行偵錯時、Visual Studio將會跳出錯誤警告視窗。

設定完後,別忘了在啟動偵錯時選擇使用「IIS Express」,畢竟剛剛調整設定的是IIS Express的啟動設定檔。

於是我設定完成後就可以順利使用Https了嗎?錯!

也不知道是否是因為電腦才剛重灌、導致過去開發時新增的localhost憑證都不在了,所以啟用SSL後碰到的就是Https不安全的瀏覽器畫面。

舊版的Visual Studio若要啟用SSL、使用Https進行偵錯,會跳出視窗詢問是否自動新增憑證,然而不知道是否是因為我專案是Http、開發到中途才啟用SSL的原因,一開始沒有主動跳出該視窗;不過也沒關係,錯誤畫面很明顯是憑證問題,然後重新創建localhost憑證即可。

由於後續打算透過指令直接重建localhost憑證,是以重新創建憑證前,可以考慮先把舊有的憑證先行清除,包含使用者憑證:個人\憑證、受信任的根憑證授權單位\憑證,以及本機電腦憑證:個人\憑證、受信任的根憑證授權單位\憑證,若有看到localhost的憑證皆可先刪除。

※ 當然未必每個地方都有憑證,以我的當時經歷來說,就只有一個目前使用者\個人\憑證存在localhost憑證。

下方提供指令進行創建localhost憑證(須使用系統管理員的權限執行):

  • 切換目錄至 IIS Express 安裝文件夾
    cd "C:\Program Files (x86)\IIS Express"

  • 創建憑證,記得先將指令中的url改為專案應用程式SSL URL
    ./IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:44300/ -UseSelfSigned

追加補充:網路上也存在另一份指令,是針對IIS Express的port 44300至44399 範圍,進行重置憑證,如下:

$cert = New-SelfSignedCertificate -DnsName "localhost", "localhost" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(5)
$thumb = $cert.GetCertHashString()

For ($i=44300; $i -le 44399; $i++) {
 netsh http delete sslcert ipport=0.0.0.0:$i
}

For ($i=44300; $i -le 44399; $i++) {
 netsh http add sslcert ipport=0.0.0.0:$i certhash=$thumb appid=`{214124cd-d05b-4309-9af9-9caa44b2b74a`}
}

$StoreScope = LocalMachine
$StoreName = root

$Store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $StoreName, $StoreScope
$Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$Store.Add($cert)

$Store.Close()

Reference:

  1. IIS Express 10 localhost SSL certificate reset
  2. Recreate the Self-Signed HTTPS Certificate for Localhost in IIS Express
  3. 【ASP.NET Web API 2】開發環境使用 SSL

限會員,要發表迴響,請先登入