Google Workspace 為 Google Workspace 或 Google Workspace for Education 客戶提供單一登入 (SSO) 服務。Google Workspace 單一登入服務接受以 RSA 或 DSA 演算法產生的公開金鑰和憑證。如要使用這項服務,您必須產生一組公開和私密金鑰,以及包含公開金鑰的 X.509 憑證。取得公開金鑰或憑證後,您需要向 Google 註冊。如要這麼做,只要透過 Google 管理控制台上傳金鑰或憑證即可。
產生金鑰和憑證的方式通常取決於開發平台和偏好的程式設計語言。以下提供幾種不同的方法,可產生 Google Workspace 單一登入服務所需的金鑰和憑證。
使用 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。設定單一登入時,您會透過控制台將這個檔案上傳至 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) 建立名為 testcert.cer 的自行簽署 X.509 憑證,以及對應的私密金鑰。
步驟 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 Security API 中與加密相關的部分。使用這個 API,您就能以所需演算法輕鬆產生公開和私密金鑰組。以下是程式碼範例,可建立 DSA 或 RSA 金鑰,搭配 Google Workspace SSO 服務使用。
建立公開和私密金鑰組
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」頁面上的所有欄位。