Google Workspace 为使用 Google Workspace 或 Google Workspace 教育版的客户提供了单点登录 (SSO) 服务。Google Workspace 单点登录服务接受通过 RSA 或 DSA 算法生成的公钥和证书。要使用此服务,您需要生成一组公钥和私钥,以及包含公钥的 X.509 证书。生成公钥或证书后,您需要在 Google 中为其注册。您只需通过 Google 管理控制台上传密钥或证书,即可完成上述操作。
生成密钥和证书的方式通常取决于您的开发平台以及首选编程语言。下面介绍了生成 Google Workspace SSO 服务所需密钥和证书的几种不同方式。
使用 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 可用来创建用于签署 SAML 响应的 X509Certificate2 (.NET 2.0+) 实例。
在 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 加密体系结构
Java 加密体系结构 (JCA) 提供用于生成和控制安全属性的核心类和接口。JCA 包含 Java 2 SDK Security 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),然后填写设置采用第三方身份提供商的单点登录下方页面上的所有字段。