{%hackmd BJrTq20hE %} <style> .markdown-body:not(.next-editor) pre { padding: 16px; background-color: #333; } .markdown-body pre.flow-chart, .markdown-body pre.sequence-diagram, .markdown-body pre.graphviz, .markdown-body pre.mermaid, .markdown-body pre.abc { background-color: #d9edf7 !important;<!-mermaidbg-!> } .markdown-body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; padding-top: 40px; padding-bottom: 40px; max-width: 800px; <!-筆記寬度-!> overflow: visible !important; position: relative; } </style> ## 前言 &emsp;&emsp;開發API需要部屬在虛擬機,而前後端分離作業的情況,前端框架容易將http視為不安全的連結,因此會希望API能使用Https連線提高資料安全性及前端框架阻擋的問題 虛擬機部署 API SSL 憑證具重大的重要性: 1. **資料安全**:SSL 憑證能夠加密客戶端與伺服器之間的資料傳輸,這對於保護傳輸過程中的敏感資料(如用戶名稱、密碼、個人資料等)至關重要。這種加密確保了資料在互聯網上傳輸時不會被竊取或竄改。 2. **增強信任度**:使用 SSL 憑證的 API 會在瀏覽器地址欄顯示鎖形圖標,這表示該連接是安全的。這有助於增強用戶對您網站或應用程式的信任,尤其是在處理支付或其他敏感交易時。 3. **提高搜尋排名**:Google 等主要搜尋引擎傾向於對使用 SSL 憑證的網站給予更高的排名。這意味著部署 SSL 憑證可以幫助提高您網站的可見度和流量。 4. **符合規範要求**:許多行業規範和法規(如 PCI DSS)要求在處理敏感數據時必須使用 SSL 加密。因此,部署 SSL 憑證不僅是最佳實踐,有時甚至是法律要求。 5. **保護免於中間人攻擊**:SSL 憑證可以防止中間人攻擊,其中攻擊者可能試圖攔截或竄改數據。通過確保所有數據都是加密的,可以大幅降低這種攻擊的風險。 ## 申請 SSL 憑證 &emsp;&emsp;這邊選擇使用zeroSSL作為範例,因為它提供了3組免費90天的SSL憑證,適合用於中短期開發,一開始請先至 [https://zerossl.com/](https://zerossl.com/),註冊好帳號 1. 按下 New Certificat 按鈕 ![image](https://hackmd.io/_uploads/rJqFKviBp.png) 2. 輸入你想選擇的網域名稱,並選擇90天免費 ![image](https://hackmd.io/_uploads/BJZhYPjST.png) ![image](https://hackmd.io/_uploads/H1UAtDjrp.png) ![image](https://hackmd.io/_uploads/r1zkcvsrp.png) 3. 免費方案可以擁有3組SSL憑證,每一組90天免費使用 ![image](https://hackmd.io/_uploads/H1CZ5wiB6.png) 4. 選擇上傳檔案的驗證方式 建議使用目錄建立`.well-known/pki-validation/ 此路徑需要的資料夾`(通常會放置在發佈專案中) :::info **windows如何建立.well-known 資料夾?** 新增資料夾&rarr;命名`.well-known.`就能建立了 ::: 5. 將驗證用的檔案放到pki-validation目錄中&rarr;下一步 ![image](https://hackmd.io/_uploads/rkz5jPoSa.png) ![image](https://hackmd.io/_uploads/SJ_RiPsHT.png) 6. 驗證成功,就可以下載憑證了 ![image](https://hackmd.io/_uploads/rJfl2wiHT.png) 7. 按下Download  Certificate 解壓縮後裡面有三個檔案 * certificate.crt * private.key * ca_bundle.crt 由於虛擬機(Azure & AWS)我們選用Windows平台,所以系統認定的格式為 ## 憑證格式轉換 當我們要拿剛剛產生的憑證會發現所產生的憑證是 `.crt` 檔, 在虛擬機(Azure & AWS於Windows平台)只接受私密金鑰憑證 (`.pfx`) 和公開金鑰憑證 (`.cer`) 這兩種憑證,而兩者的差別在於,PFX 格式的憑證是包含有私鑰,CER 格式的憑證裡面只有公鑰沒有私鑰。 因此我們必須要進行憑證格式轉換,詳細你可以參考這篇[憑證格式轉換 \- 將 CRT 與 KEY 轉換 PFX](http://dog0416.blogspot.com/2017/08/opensslwindows-crt-key-pfx.html)操作,這裡只簡單列一下步驟: 1. 下載並安裝 [OpenSSL for Windows](http://gnuwin32.sourceforge.net/packages/openssl.htm) 2. 將 `.crt` 與 `.key` 檔案複製到 OpenSSL 的 bin 資料夾,預設路徑是 `C:\Program Files (x86)\GnuWin32\bin` 3. 用**系統管理員身分開啟命令提示字元 (command line)** 並輸入 `cd C:\Program Files (x86)\GnuWin32\bin` 4. 執行轉換指令,過程中會要輸入匯出密碼,請記住此密碼,稍後上傳 Azure Web App 時會用到 `openssl pkcs12 -export -inkey private.key -in certificate.crt -out Certificate_For_Azure.pfx` :::warning ![image](https://hackmd.io/_uploads/B13OCwjrp.png) 在過程中會輸入兩次密碼進行驗證,但是cmd本身不會顯示任何字元,這是正常的,只需要打完確認即可 ::: 5. 完成! 按照上述操作,你可以在 `C:\Program Files (x86)\GnuWin32\bin` 找到 `Certificate_For_Azure.pfx` 私密金鑰憑證。 ![image](https://hackmd.io/_uploads/B1qcAviBT.png) ## 匯入SSL憑證方法 1. 將轉換完成的憑證放到虛擬機並執行,Current User和Local Machine都可以,這邊選擇Current User ![image](https://hackmd.io/_uploads/B1NukNhSa.png) 2. 選擇要匯入的憑證,這邊直接下一部即可 ![image](https://hackmd.io/_uploads/H1cTkE3rp.png) 3. 這邊惠要求你輸入剛剛在SSL轉換時所輸入的密碼,輸入後直接下一步 ![image](https://hackmd.io/_uploads/SJGHgE3ra.png) 5. 選擇憑證放置的資料夾,讓他自動即可 ![image](https://hackmd.io/_uploads/rJF-e43Sa.png) 6. 匯入完成 ![image](https://hackmd.io/_uploads/HygVx43Sp.png) ## 使用匯入的SSL憑證 1. 在IIS Manager中選擇自己的網頁,並點選右邊的Binding ![image](https://hackmd.io/_uploads/B1k0gN2r6.png) 2.點選Add新增Port,並選擇安裝的憑證,就可以了 ![image](https://hackmd.io/_uploads/SkyJzEhrT.png)