无法在WIF方案中使用证书签署安全令牌

时间:2011-06-20 15:02:34

标签: wcf x509certificate wif makecert

我正在尝试为我正在调查的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(即,在我的自定义STS类上调用GetOutputClaimsIdentity(...)之后,因此我只能假设它现在正在尝试签署已颁发的安全令牌并且失败,因为它无法获得私钥。

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

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

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

2 个答案:

答案 0 :(得分:1)

看起来日内瓦(= AD FS 2.0)论坛中的线程"cant use .pfx file for X.509 certificates"涵盖了您报告的同一问题。因此,报告的解决方案可能有效,即“在启动X509KeyStorageFlags.PersistKeySet对象时指定X509Certificate2标志”。

答案 1 :(得分:0)

如果您在打开PFX文件时不必指定密码,我会感到惊讶。 X509Certificate2 has overloads以字符串或SecureString的形式获取密码。