2

我正在尝试为我正在调查的 WIF 场景实施自定义 STS,但它失败了。尝试从用于签署令牌的证书中获取私钥时失败。我使用以下配置创建 STS:

var signingCert = new X509Certificate2(@"C:\<path>\MySigningCertificate.pfx");
var config
    = new SecurityTokenServiceConfiguration()
    {
        DisableWsdl = true,
        TokenIssuerName = "Tribold",
        SecurityTokenService = typeof(TriboldSecurityTokenService),
        SigningCredentials = new X509SigningCredentials(signingCert),
        CertificateValidationMode = X509CertificateValidationMode.Custom,
        CertificateValidator = new CertificateValidator()
    };

但是,配置 WCF 诊断日志记录后,我在服务跟踪查看器中收到以下消息:

The private key is not present in the X.509 certificate.

这似乎被记录为代码来自我的自定义 STS(即,在调用GetOutputClaimsIdentity(...)我的自定义 STS 类之后,因此我只能假设它现在正在尝试签署已颁发的安全令牌并失败,因为它无法获得这样做的私钥。

私钥似乎出现在加载的证书上:

Debug.Assert(signingCert.HasPrivateKey == true);

但后来失败了。我没有运气解决这个问题,请帮助!

4

2 回答 2

1

看起来日内瓦(= AD FS 2.0)论坛中的线程“无法将 .pfx 文件用于 X.509 证书”涵盖了您报告的相同问题。因此,那里报告的解决方案可能会起作用,即“X509KeyStorageFlags.PersistKeySet在启动X509Certificate2对象时指定标志”。

于 2011-06-20T18:18:47.110 回答
0

如果您在打开 PFX 文件时不必指定密码,我会感到惊讶。X509Certificate2具有采用字符串或 SecureString 形式的密码的重载。

于 2011-06-21T07:39:50.300 回答