证书和密钥
更新时间:2015 年 6 月 19 日
适用于:Azure
Microsoft Azure Active Directory 访问控制 (也称为访问控制服务或 ACS) 提供了两种不同的方法来对令牌进行签名和加密:使用私钥和 256 位对称密钥的 X.509 证书。 你可以配置每个证书或密钥,以便为特定信赖方应用程序或命名空间中的所有信赖方应用程序的令牌签名,并且可以将证书和密钥指定为主证书/密钥或辅助证书/密钥。 若要添加和配置令牌签名、加密和解密证书和密钥,请使用 ACS 管理服务或 ACS 管理门户。
为令牌签名
ACS 使用私钥) 或 256 位对称密钥对 X.509 证书 (颁发的所有安全令牌进行签名。 选择签名凭据类型 (证书或密钥) 取决于为 ACS 颁发的令牌选择的令牌格式。 有关详细信息,请参阅 信赖方应用程序中的“令牌签名”。 选择要创建哪种类型的签名凭据时,请考虑以下内容:
SAML 令牌使用 X.509 证书进行签名。 SAML 是基于 Windows Identity Foundation (WIF) 构建的应用程序默认使用的令牌格式。 SAML 令牌可以通过多个协议(如 WS 联合身份验证和 WS 信任)颁发。
SWT 令牌使用 256 位对称密钥进行签名。 SWT 令牌可以通过多个协议(如 OAuth WRAP 和 WS 联合身份验证)颁发。
JWT 令牌可以由 X.509 证书或 256 位对称密钥签名。 JWT 令牌可以通过多个协议(如 WS 联合身份验证、WS 信任和 OAuth 2.0)颁发。
命名空间或专用证书和密钥
可以配置签名证书或对称密钥,以便它用于整个访问控制命名空间,或仅用于命名空间中的特定信赖方应用程序。 不同之处如下所示:
访问控制命名空间 - 为整个访问控制命名空间配置签名证书或密钥时,ACS 使用证书或密钥为此命名空间中没有特定于应用程序的证书或密钥的所有信赖方应用程序签名令牌。 命名空间范围的证书还用于对 ACS WS-Federation元数据进行签名。
专用 - 如果将签名证书或密钥配置为用于特定信赖方应用程序,ACS 将使用签名证书或密钥来对传递到指定信赖方应用程序的令牌进行签名。
如果创建或输入专用对称密钥,ACS 将使用专用密钥为应用程序签名令牌。 如果专用密钥过期且未替换,ACS 将使用访问控制命名空间的对称密钥为应用程序签名令牌。
注意
- 安全的最佳做法是,使用对称密钥时,为每个信赖方应用程序都创建一个专用密钥。 X.509 证书可由访问控制命名空间中的多个应用程序安全地共享。
- 当你将 Microsoft 管理的信赖方应用程序添加到托管命名空间(如将 Service Bus 信赖方应用程序添加到 Service Bus 命名空间)时,请勿使用特定于应用程序的(专用的)证书或密钥, 而应选择 ACS 选项,以使用为托管命名空间中的所有应用程序配置的证书和密钥。 对于所有其他信赖方应用程序,请使用特定于应用程序的证书和密钥。 有关详细信息,请参阅 托管命名空间。
- 配置使用访问控制命名空间的 X.509 证书对 JWT 令牌进行签名的信赖方应用程序时,指向访问控制命名空间证书的链接,访问控制命名空间密钥将显示在 ACS 管理门户中信赖方应用程序的页面上。 但是,ACS 仅使用命名空间证书为信赖方应用程序签名令牌。
签名证书通常用于为命名空间中所有信赖方应用程序的令牌签名。 命名空间签名证书的公钥组件在 ACS WS-Federation元数据中发布,使信赖方应用程序能够自动执行其配置。 仅分配给特定信赖方应用程序的证书的公钥不在 ACS WS-Federation元数据中,并且仅在需要对信赖方应用程序的签名证书进行独立控制时才使用。
主证书和密钥
在 ACS 中,可以维护多个证书和密钥,但只使用指定的证书和密钥来对令牌进行签名。 指定用于签名的证书和密钥称为主证书和密钥。
若要将证书或密钥指定为主证书或密钥,请在该证书或密钥的页上选择“设为主证书或密钥”项。 若要将其他证书指定为主证书,请在其他证书或密钥的页上选择“设为主证书或密钥”项。 执行此操作时,ACS 会自动将任何现有的主证书或密钥降级为非主证书。
当至少有一个证书或密钥是主证书或密钥时,非主证书和密钥不能用于签名(除非管理员将它们提升为主证书和密钥状态),即使主证书或密钥无效或已过期,也是如此。 但是,如果没有证书 (或密钥) 是主要证书,ACS 将使用具有最早有效开始日期的非主证书。
主证书和非主证书的公钥组件在 ACS WS-Federation元数据中发布,以启用编程证书滚动更新。 但是 ACS 仅使用主证书和密钥对令牌进行签名。
签名密钥的生效日期和到期日期
在添加 256 位对称签名密钥时,还必须指定生效日期和到期日期。 生效日期是指此密钥生效的日期。 到期日期是指此密钥到期的日期,不能使用到期密钥为令牌签名。
加密令牌
在 ACS 中,可以选择加密 ACS 向信赖方应用程序颁发的任何 SAML 1.1 或 SAML 2.0 令牌。
重要
ACS 不支持对 SWT 或 JWT 令牌进行加密。
令牌加密对于通过 WS 信任协议使用拥有证明令牌的 Web 服务是必需的。 如果使用 ACS 管理此类信赖方应用程序的身份验证,则必须加密此信赖方应用程序的所有 ACS 颁发的令牌。 在所有其他情况下,令牌加密是可选的。
ACS 使用包含公钥的 X.509 证书 (.cer 文件) 来加密 SAML 令牌。 信赖方应用程序令牌使用该 X.509 证书的私钥来解密令牌。 有关详细信息,请参阅 信赖方应用程序中的“令牌加密”。
解密令牌
ACS 可以接受来自WS-Federation标识提供者的加密令牌,例如。 WS-Federation标识提供者从 ACS 导入WS-Federation元数据时接收 X.509 证书的公钥,并使用此公钥来加密转发到 ACS 的安全令牌。 ACS 使用此 X.509 证书的私钥解密令牌。 有关详细信息,请参阅 如何:将 AD FS 2.0 配置为标识提供者。
主令牌解密证书
可以为信赖方应用程序或访问控制命名空间维护多个令牌解密证书。 将证书指定为 主要证书时,ACS 使用该证书从WS-Federation标识提供者解密令牌,并且仅在尝试使用主证书失败时才使用非主证书。
若要将解密证书指定为主证书,请在该证书的页上选择“设为主证书或密钥”项。 若要将其他证书指定为主证书,请在其他证书的页上选择“设为主证书或密钥”项。 完成后,ACS 会自动将任何现有的主解密证书降级到非主证书。
X.509 证书文件的 ACS 限制
在 ACS 中,仅包含公钥的 X.509 证书 (.cer 文件) 可用于创建服务标识、验证标识提供者的签名或加密 SAML 令牌。 仅包含公钥的 X.509 证书文件 (.cer 文件) 必须进行 DER 编码才能与 ACS 一起使用。 目前不支持 Base64 编码的证书文件。 将 base64 编码的证书上传到 ACS 将导致在 ACS 收到需要该证书的传入令牌时出现验证错误。
在 ACS 中,X.509 证书必须自签名或直接链接到公共证书颁发机构。 ACS 不适用于由专用证书颁发机构颁发的证书。
注意
导入 ACS 的 X.509 ceritificate 不得过期。
获取 X.509 证书
有几种方法可以获取用于令牌签名、令牌加密或解密的 X.509 证书。 你使用的方法取决于你的需求和你组织提供的工具。
商业证书颁发机构 - 你可以从商业证书颁发机构购买 X.509 证书。
生成Self-Signed证书 - 可以生成自己的自签名证书以用于 ACS。 如果运行的是基于Windows的操作系统,可以使用 MakeCert.exe(Microsoft Windows 软件开发工具包https://go.microsoft.com/fwlink/?LinkID=214104 () 中包含的工具)生成自签名证书。
例如,以下命令在你的个人证书存储中生成自签名证书。
MakeCert.exe -r -pe -n "CN=<service_namespace_name>.accesscontrol.windows.net" -sky exchange -ss my -len 2048 –e <1 year from today>
其中<service_namespace_name>是访问控制命名空间的名称。
然后,可以将私钥从个人存储导出为 .pfx 文件,并使用 ACS 管理门户将其上传到 ACS。
导出自签名证书
这些说明说明如何从运行Windows 8、Windows Server 2012或的计算机导出自签名认证。
导出自签名证书
"开始"菜单 MMC.exe并将证书管理单元添加到 MMC 控制台。
依次双击“证书 - 当前用户”、“个人”、“证书”。
右键单击某一证书,单击“所有任务”,然后单击“导出”。
在“证书导出向导”欢迎页上,单击“下一步”。
在“导出私钥”页上,单击“是,导出私钥”,然后单击“下一步”。
在“导出文件格式”页上,单击“个人信息交换 - PKCS #12 (.PFX)”。
在“密码”字段中,输入密码和确认密码,然后单击“下一步”。
在“文件名”字段中,输入路径和带 .pfx 文件扩展名的文件名,然后单击“下一步”。
单击“完成”。
证书和密钥的有效日期
ACS 评估协调世界时 (UTC) 中证书和密钥的开始和结束日期 (和日期时间) 。 因此,ACS 可能会考虑密钥和证书无效,即使它们在本地计算机或另一个时区中有效也是如此。
若要立即确保证书或密钥有效,请将日期调整为 UTC 时间。 否则,ACS 可能无法颁发令牌,因为密钥或证书尚无效。