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。这是您在配置单点登录时通过控制面板上传到 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 加密体系结构
Java 加密架构 (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),然后填写设置采用第三方身份提供方单点登录下页面中的所有字段。