Google Workspace 為客戶提供單一登入 (SSO) 服務,您可以在 Google Workspace 或 Google Workspace for Education 中使用。Google Workspace 單一登入服務可接受由 RSA 或 DSA 演算法產生的公開金鑰和憑證。如要使用這項服務,您必須產生一組公開金鑰和私密金鑰,以及包含公開金鑰的 X.509 憑證。取得公開金鑰或憑證後,您必須向 Google 進行註冊。您可以直接透過 Google 管理控制台上傳金鑰或憑證來完成註冊。
產生金鑰和憑證的方式通常取決於您的開發平台和程式設計語言偏好。以下列出的幾種方式皆可用來產生 Google Workspace 單一登入 (SSO) 服務所需的金鑰和憑證。
使用 OpenSSL
您可以透過多種方式建立公開和私密金鑰組,其中開放原始碼 OpenSSL 工具是最熱門的方式之一。OpenSSL 工具已移至所有主要平台,並提供您簡易的命令列介面來產生金鑰。
建立 RSA 私密金鑰
使用 OpenSSL 產生 RSA 私密金鑰只需要一個步驟:
openssl genrsa -out rsaprivkey.pem 2048
這個指令會產生 PEM 編碼的私密金鑰,並將金鑰儲存在 rsaprivkey.pem 檔案中。這個範例指令會建立 2048 位元的金鑰,適用於幾乎所有用途。請將產生的私密金鑰妥善保存,避免外洩;這個金鑰可用於簽署及解密資料。
部分實作 (尤其是 Java 的實作) 可能需要使用 DER 或 PKCS8 指令,另外進行下列步驟即可產生這些指令:
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt
步驟 1 可以產生 DER 格式的公開金鑰。
步驟 2 可以產生 pkcs8 和 DER 格式的私密金鑰。金鑰產生後即可供您使用 (rsapubkey.der 和 rsaprivkey.der)。
建立 DSA 私密金鑰
產生 DSA 金鑰需要下列兩個步驟:
openssl dsaparam -out dsaparam.pem 2048openssl gendsa -out dsaprivkey.pem dsaparam.pem
第一個步驟可以建立 DSA 參數檔案 (dsaparam.pem),在這個例子中可指定 OpenSSL 建立步驟 2 中的 2048 位元金鑰。dsaparam.pem 檔案本身並不是金鑰,且可以在建立公開和私密金鑰後捨棄。第二個步驟則會實際在 dsaprivkey.pem 檔案中建立私密金鑰 (請將金鑰保密)。
如要將金鑰匯出成 DER (二進位) 格式,請使用下列步驟:
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt
步驟 1 可將公開金鑰擷取為 DER 格式。
步驟 2 可將私密金鑰轉換為 pkcs8 和 DER 格式。完成這個步驟後,您就可以使用這個公開 (dsapubkey.der) 和私密 (dsaprivkey.der) 金鑰組。
建立憑證
擁有金鑰組後,建立 X.509 憑證就非常簡單了。憑證包含對應的公開金鑰,以及部分與建立憑證的機構相關的中繼資料。按照這個步驟,透過 RSA 或 DSA 私密金鑰建立自行簽署的憑證:
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
在您回答幾個問題後,系統就會建立憑證並儲存為 dsacert.pem。這是您設定單一登入 (SSO) 服務時,透過控制台上傳至 Google Workspace 的檔案。
建立憑證指紋
部分應用程式需要使用 X.509 憑證指紋,而非 X.509 憑證本身。指紋是 x509 二進位格式的憑證摘要。指紋類型取決於用來產生指紋的演算法,例如 SHA-1 或 SHA-256。
如要透過 X.509 憑證建立 SHA-256 指紋,請使用以下指令 (替換成實際憑證的 .pem 檔案名稱):
openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"
在 .NET 中使用 Microsoft Visual Studio
您可以使用 Microsoft Visual Studio 2005 提供的公用程式 (位於 Common7ToolsBin 目錄) 來產生用於 Google Workspace 的憑證。請按照下列步驟在 .NET 建立公開/私密金鑰組和憑證:
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx
根據預設,RSA 演算法會用於上述的指令。步驟 1 會使用憑證建立工具 (makecert.exe) 建立自行簽署的 X.509 憑證 (testcert.cer) 以及對應的私密金鑰。
步驟 2 則會使用 pvk2pfx 工具 (pvk2pfx.exe) 從 CER 和 PVK 檔案建立個人資訊交換 (PFX) 檔案。PFX 包含您的公開和私密金鑰。
您可以使用控制台將在步驟 1 建立的 testcert.cer 檔案上傳到 Google Workspace,也可以使用步驟 2 的 testcert.pfx 建立 X509Certificate2 (.NET 2.0 以上版本) 執行個體,並用來簽署 SAML 回應。
在 Java 中使用 Keytool
Java 開發人員可以使用標準 JDK 中的 keytool 公用程式,建立公開/私密金鑰組和 X.509 憑證。keytool 是金鑰和憑證管理公用程式,可讓使用者管理自己的公開/私密金鑰組和相關聯的憑證,用於需要數位簽章的驗證機制。keytool 會將金鑰和憑證儲存在「金鑰儲存區」中,預設實作方式只是使用者主目錄中的檔案 (.keystore)。私密金鑰會受到密碼保護。
建立 DSA 金鑰組
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
步驟 1 會使用 DSA 演算法產生公開/私密金鑰組 (大小為 2048 位元,有效期限為 180 天)。
步驟 2 則會從公開金鑰產生 X.509 憑證 (dsasso.cer)。然後使用控制台將 dsasso.cer 上傳至 Google Workspace。
建立 RSA 金鑰組
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
步驟 1 會使用 RSA 演算法產生公開/私密金鑰組 (大小為 2048 位元,有效期限為 180 天)。
步驟 2 則會從公開金鑰產生 X.509 憑證 (rsasso.cer)。接下來,您就可以透過控制台將 rsasso.cer 上傳到 Google Workspace。
使用 Java Cryptography Architecture
Java Cryptography Architecture (JCA) 會提供核心類別和介面,可供產生及處理安全性內容。JCA 包含密碼編譯相關的 Java 2 SDK 安全性 API 的部分。您可以透過這個 API 使用想要的演算法輕鬆產生公開和私密金鑰組。下方的程式碼範例可建立要用於 Google Workspace 單一登入 (SSO) 服務的 DSA 或 RSA 金鑰,歡迎參考。
建立公開和私密金鑰組
import java.io.*;
import java.security.*;
public class KeyGenDSA {
public static void main(String[] args) {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
SecureRandom random = SecureRandom.getInstanceStrong();
keyGen.initialize(2048, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
byte[] encPriv = priv.getEncoded();
FileOutputStream privfos = new FileOutputStream("DSAPrivateKey.key");
privfos.write(encPriv);
privfos.close();
byte[] encPub = pub.getEncoded();
FileOutputStream pubfos = new FileOutputStream("DSAPublicKey.key");
pubfos.write(encPub);
pubfos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述程式碼使用 KeyPairGenerator 建立 DSA 金鑰組。產生的金鑰是二進位格式,並會輸出成個別檔案。取得金鑰後,您就可以透過 Google Workspace 註冊公開金鑰,並使用私密金鑰簽署您的 SAMLResponse。如要產生 RSA 金鑰組 (而非 DSA 金鑰組),只要將程式碼中的 "DSA" 改成 "RSA" 即可。
透過 Google Workspace 註冊您的憑證和公開金鑰
將金鑰與憑證產生步驟中較為複雜的部分完成後,下一步就非常簡單了。如要透過 Google Workspace 註冊您的憑證或公開金鑰,請前往管理控制台並以管理員的身分登入。依序選取「安全性」和「設定單一登入 (SSO)」,然後填妥頁面中「透過第三方識別資訊提供者設定 SSO」下方的所有欄位。