Невозможно подписать токены безопасности с помощью сертификата в сценарии WIF - PullRequest
2 голосов
/ 20 июня 2011

Я пытаюсь реализовать пользовательский STS для сценария WIF, который я изучаю, но он терпит неудачу.При попытке получить закрытый ключ из сертификата, используемого для подписи токенов, происходит сбой.Я создаю 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);

, но позже это не удается. Мне не повезлопомогите, пожалуйста!

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Похоже, что поток "не может использовать файл .pfx для сертификатов X.509" на женевских форумах (= AD FS 2.0) охватывает ту же проблему, о которой вы сообщаете.Таким образом, разрешение, о котором там сообщается, может сработать, что означает «указание флага X509KeyStorageFlags.PersistKeySet при инициализации объекта X509Certificate2».

0 голосов
/ 21 июня 2011

Я был бы удивлен, если бы вам не пришлось указывать пароль при открытии файла PFX.X509Certificate2 имеет перегрузки , которые принимают пароль в виде строки или SecureString.

...