如何:更改 X.509 证书私钥的加密提供程序

本主题说明如何更改用于提供 X.509 证书私钥的加密提供程序以及如何将该提供程序集成到 Windows Communication Foundation (WCF) 安全框架中。有关使用证书的更多信息,请参见使用证书

如何:创建自定义令牌中所述,WCF 安全框架提供了一种引入新安全令牌类型的方法。还可以使用自定义令牌替换系统提供的现有令牌类型。

在本主题中,系统提供的 X.509 安全令牌替换为自定义 X.509 令牌,此自定义令牌提供了一种不同的证书私钥的实现。当实际私钥是由默认 Windows 加密提供程序之外的其他加密提供程序提供时,这是非常有用的。可选的加密提供程序的一个示例是硬件安全模块,该模块执行所有私钥相关的加密操作并且没有将私钥存储在内存中,从而提高了系统的安全性。

下面的示例仅供演示使用。它不会替换默认的 Windows 加密提供程序,而只是演示在哪种情况下可以集成这样一个提供程序。

过程

每个具有一个或多个关联的安全密钥的安全令牌都必须实现 SecurityKeys 属性,以便从此安全令牌实例返回一个密钥集合。如果此令牌为 X.509 安全令牌,则集合包含一个 X509AsymmetricSecurityKey 类的实例,此类表示与证书关联的公钥和私钥。若要替换用于提供证书密钥的默认的加密提供程序,请创建此类的一个新实现。

创建自定义 X.509 非对称密钥

  1. 定义一个从 X509AsymmetricSecurityKey 类派生的新类。

  2. 重写 KeySize 只读属性。此属性返回证书的公钥/私钥对的实际密钥大小。

  3. 重写 DecryptKey 方法。WCF 安全框架调用此方法以使用证书的私钥来解密对称密钥。(此密钥之前使用证书的公钥进行加密。)

  4. 重写 GetAsymmetricAlgorithm 方法。WCF 安全框架调用此方法以获取 AsymmetricAlgorithm 类的实例,此类表示证书私钥或公钥的加密提供程序,具体取决于传递到此方法的参数。

  5. 可选。重写 GetHashAlgorithmForSignature 方法。如果需要 HashAlgorithm 类的另一个实现,请重写此方法。

  6. 重写 GetSignatureFormatter 方法。此方法返回与证书私钥关联的 AsymmetricSignatureFormatter 类的实例。

  7. 重写 IsSupportedAlgorithm 方法。此方法用于指示安全密钥实现是否支持某个特定的加密算法。

下面的过程演示如何将上面的过程中创建的自定义 X.509 非对称安全密钥实现与 WCF 安全框架集成,以替换系统提供的 X.509 安全令牌。

将系统提供的 X.509 安全令牌替换为自定义 X.509 非对称安全密钥令牌

  1. 创建一个自定义 X.509 安全令牌,此令牌返回自定义 X.509 非对称安全密钥而不是系统提供的安全密钥,如下面的示例所示。有关自定义安全令牌的更多信息,请参见如何:创建自定义令牌

  2. 创建一个自定义安全令牌提供程序以返回一个自定义 X.509 安全令牌,如下面的示例所示。有关自定义安全令牌提供程序的更多信息,请参见如何:创建自定义安全令牌提供程序

  3. 如果自定义安全密钥需要在发起方端使用,请创建一个自定义客户端安全令牌管理器和若干自定义客户端凭据类,如下面的示例所示。有关自定义客户端凭据和客户端安全令牌管理器的更多信息,请参见如何:创建自定义客户端和服务凭据

  4. 如果自定义安全密钥需要在接收方端使用,请创建一个自定义服务安全令牌管理器和若干自定义服务凭据,如下面的示例所示。有关自定义服务凭据和服务安全令牌管理器的更多信息,请参见如何:创建自定义客户端和服务凭据

另请参见

任务

如何:创建自定义安全令牌提供程序

参考

X509AsymmetricSecurityKey
AsymmetricSecurityKey
SecurityKey
AsymmetricAlgorithm
HashAlgorithm
AsymmetricSignatureFormatter

概念

如何:创建自定义客户端和服务凭据
如何:创建自定义安全令牌身份验证器
如何:创建自定义令牌
安全体系结构