使用 PSK 建立密鑰

本頁說明如何產生預先共用金鑰 (PSK),並使用該 PSK 建立驗證密鑰。

PSK 是共用的密碼,可用於驗證及加密兩部裝置之間的通訊內容。這是對稱式加密的一種形式。

事前準備

如要建立密鑰,您必須具備必要的 Identity and Access 角色:

  • VPN 管理員:具備所有 VPN 相關資源的讀寫權限。請機構 IAM 管理員授予您 VPN 管理員 (vpn-admin) 角色。
  • VPN 檢視者:具備所有 VPN 相關資源的讀取權限。請要求機構 IAM 管理員授予您 VPN 檢視者 (vpn-viewer) 角色。
  • 詳情請參閱「角色定義」。

產生 PSK

請使用下列方法產生高強度的 32 字元預先共用金鑰。

OpenSSL

如要進一步瞭解 OpenSSL,請參閱 https://www.openssl.org/。 在 Linux 或 macOS 系統上執行下列 OpenSSL 指令:

openssl rand -base64 24

/dev/urandom

在 Linux 或 macOS 系統上,您也可以使用 /dev/urandom 做為虛擬隨機來源,產生預先共用金鑰:

  • 在 Linux 或 macOS 上,將隨機輸入內容傳送至 base64

    head -c 24 /dev/urandom | base64
    
  • 透過雜湊函式 (例如 sha256) 傳遞隨機輸入內容:

    • 使用 Linux 電腦:

      head -c 4096 /dev/urandom | sha256sum | cut -b1-32
      
    • 在 macOS 上執行下列操作:

      head -c 4096 /dev/urandom | openssl sha256 | cut -b1-32
      

JavaScript

您也可以將 JavaScript 和 W3C Web Cryptography API 搭配使用,在文件中直接產生預先共用金鑰。詳情請參閱 https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues

這個 API 使用的 Crypto.getRandomValues() 方法詳情請參閱:https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues,這個方法會以高強度加密的方式產生預先共用金鑰。

下列程式碼會建立 24 個隨機位元組的陣列,然後將這些位元組進行 Base64 編碼,產生 32 個字元的隨機字串:

  var a = new Uint8Array(24);
  window.crypto.getRandomValues(a);

  console.log(btoa(String.fromCharCode.apply(null, a)));

建立密鑰

在平台命名空間中,使用 PSK 金鑰建立密鑰:

kubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n platform generic PSK_NAME --from-literal=psk=PSK

更改下列內容:

  • MANAGEMENT_API_SERVER:區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
  • PSK_NAME:PSK 金鑰的名稱。
  • PSK:PSK 金鑰的值。

後續步驟