在不同 mac 上共享 .NET 開發用憑證

最近團隊為了避免部份功能在開發階段因為憑證問題無法正常運作而造成開發與實際的 production code 有所差異,因此想要逐步套用 https everywhere 的機制。 在 local 開發環境,使用自簽憑證就很方便了,但與其要教會所有人自簽憑證所以就想讓大家在執行團隊環境設定時一併安裝統一的憑證,以免去可能遇到的異常狀況,所以今天就來記錄一下如何在不同的 mac 上共享 .NET 開發用憑證。

基本環境說明

  1. macOS Sonoma 14.3.1 (Apple M2 Pro)
  2. .NET 8.0.101

設定方式

  1. 使用 .NET SDK 產生憑證

    • 語法

      dotnet dev-certs https 
      [-c|--check] [--clean] [-ep|--export-path <PATH>]
      [--format] [-i|--import] [-np|--no-password]
      [-p|--password] [-q|--quiet] [-t|--trust]
      [-v|--verbose] [--version]
      
    • 範例

      dotnet dev-certs https -ep test.pfx -p pass.123
      
  2. 嘗試直接使用 .NET SDK 匯入憑證失敗

    • 匯入語法

      dotnet dev-certs https --clean -i ~/Downloads/test.pfx -p pass.123
      
    • 錯誤訊息

      The provided certificate file '/Users/yowko.tsai/Downloads/test.pfx' is not a valid PFX file or the password is incorrect.
      
    • 錯誤截圖

      1dotnetimport

  3. 將共享憑證匯入到 mac

    • 語法

      security import {pfx 檔案位置} -k ~/Library/Keychains/login.keychain-db -t cert -f pkcs12 -P {pfx 密碼} -A
      
    • 範例

      security import ~/Downloads/test.pfx -k ~/Library/Keychains/login.keychain-db -t cert -f pkcs12 -P pass.123 -A
      

      2securityimport

  4. .NET SDK 信任憑證

    dotnet dev-certs https --trust
    

    3dotnettrust

  5. 確認憑證

    dotnet dev-certs https --check
    

    4checkcert

心得

  1. 憑證效期只能有一年
  2. .NET 5 開始可以使用 pem,但 .NET SDK 匯入還是只支援 pfx,但實際上我也沒有直接使用 .NET SDK 成功匯入過

    5pemerror

參考資訊

  1. Microsoft Learn:Enforce HTTPS in ASP.NET Core
  2. Microsoft Learn:dotnet dev-certs
  3. How to fix “The provided certificate file is not a valid PFX file” with dotnet dev-certs https import on macOS
  4. Setting up ASP.NET Core dev certs for both WSL and Windows