Two-Way SSL Authentication

有時候有些廠商都會有一些奇怪的限制,會要求你做雙向驗證,這部分有點撞牆,所以先大略筆記一下,免得下次金魚腦忘記。

前置作業分成幾個部分

第一個部分

對方要提供他們家的憑證,透過openssl去提取其中的資訊出來,轉存成cer檔案(Azure只吃cer),指令如下

openssl pkcs12 -in P12檔案名稱.p12 -clcerts -nokeys -out CER檔案名稱.cer

之後就會在資料夾裡面產生一個AZR_CRT_USE.cer的這個檔案,這個檔案之後要放到Azure的App Service上面(或是Azure Key Vault),到這邊CER的提取就算完成了,接下來就是找RD溝通,讓API可以去引用這個檔案。

第二個部分

請RD將CER檔案引用進API程式裡面,同時也要將CER檔案包在專案內一起發佈到App Serivce,如下圖是在kudu上瀏覽的畫面。

引用的方式可以參考微軟官方的開發指南 Use a TLS/SSL certificate in your code in Azure App Service https://docs.microsoft.com/en-us/azure/app-service/configure-ssl-certificate-in-code#load-certificate-from-file

第三個部分就是把剛剛的CER也上傳一份到App Service裡面

如下圖

TLS/SSL settings →Public Key Certificate → Upload Public Key Certificate,這邊Location選LocalMachineMy這個選項,然後Azure會去擷取(算出)該CER的指紋,

把指紋先複製到剪貼簿,等等會用到。

小小的吶喊一下!!!寫到這邊,老實說我還是無法這其中的運作原理,更無法理解為什麼我要在API內包一次,然後在Azure App Service又包一次,真的不懂啊Orz….

新增以下參數,有些參數可能在Step2的時候有新增了,不過避免年紀大忘記,再檢查一下有沒有疏漏掉的

WEBSITE_LOAD_CERTIFICATES : *

WEBSITE_LOAD_ROOT_CERTIFICATES: 填入剛剛複製的指紋

WEBSITE_LOAD_USER_PROFILE: 1

接著將頁籤切換到General settings,如下圖

瀏覽到最下面的區塊 Incoming client certificates

Client certificate mode : Require選擇這個

記得要按Save,讓service重新吃設定。

接著就可以用Insomnia或是Postman測試了,這邊我用Insomnia測試(我不太會用Postman)

Last updated