2011-06-20 3 views
2

J'essaie d'implémenter un STS personnalisé pour un scénario WIF que j'examine, mais il échoue. Il échoue lorsque vous essayez d'obtenir la clé privée du certificat utilisé pour signer les jetons. Je crée les STS avec la configuration suivante:Impossible de signer des jetons de sécurité avec certificat dans le scénario WIF

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() 
    }; 

Cependant, avec l'enregistrement de diagnostic WCF configuré, je reçois le message suivant dans le Service Trace Viewer:

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

Cela semble être connecté comme le code sort de mon STS personnalisé (ie, après avoir appelé GetOutputClaimsIdentity(...) sur ma classe STS personnalisée, et donc je peux seulement supposer qu'il essaie maintenant de signer le jeton de sécurité émis et échouer parce qu'il ne peut pas obtenir une clé privée pour le faire

La clé privée semble être présent sur le certificat chargé:

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

mais il échoue plus tard. Je n'ai pas de chance pour résoudre ça, aidez s'il vous plaît!

+0

Juste pour confirmer: Lorsque vous regardez les propriétés du certificat avec le composant logiciel enfichable de certificat mmc, est-ce qu'il dit "Vous avez une clé privée qui correspond à ce certificat"? – nzpcmad

+0

@nzpcmad - Oui, le certificat comporte un cadenas et le message apparaît également lorsque vous double-cliquez sur le certificat et affichez ses détails. J'ai importé les fichiers .PFX qui ont été créés à partir des certificats. –

Répondre

1

Il semble que le fil "cant use .pfx file for X.509 certificates" dans les forums de Genève (= AD FS 2.0) couvre le même problème que vous signalez. Ainsi, la résolution signalée pourrait fonctionner, c'est-à-dire "spécifier l'indicateur X509KeyStorageFlags.PersistKeySet lors de l'initialisation de l'objet X509Certificate2".

+0

Je suis tombé sur ce forum et l'ai essayé. Cela n'a pas fonctionné et m'a quand même donné l'erreur "la clé privée n'est pas présente". Si frustrant. J'ai désactivé la nécessité de crypter les jetons de sécurité pour le moment (en me fiant à la sécurité des messages), et cela m'amène à la prochaine erreur. –

0

Je serais surpris si vous n'aviez pas à spécifier un mot de passe lors de l'ouverture d'un fichier PFX. X509Certificate2 has overloads qui prend un mot de passe sous la forme d'une chaîne ou d'un SecureString.

+0

J'ai essayé des certificats avec et sans clé privée protégée par mot de passe - les deux produisant la même erreur. –

Questions connexes