La clé privée ne prend pas en charge l'échange keyspec lors de la réponse ADFS2.0

StackOverflow https://stackoverflow.com/questions/5406843

  •  29-10-2019
  •  | 
  •  

Question

Avoir un tel problème

Nous avons revendiqué le site ASP.NET et le serveur ADFS configurés pour ce site

Donc, que nous avons - nous lançons notre application Web - déplacée pour l'authentification sur ADFS Server et revenons sur le site Web - en conséquence, nous avons la page du serveur d'erreur avec l'URL de notre site

**System.NotSupportedException: The private key does not support the exchange KeySpec.
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  
Stack Trace: 
[NotSupportedException: The private key does not support the exchange KeySpec.]
   System.IdentityModel.Tokens.X509AsymmetricSecurityKey.DecryptKey(String algorithm, Byte[] keyData) +237615
   System.IdentityModel.Selectors.SimpleTokenResolver.TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, SecurityKey& key) +378
   Microsoft.IdentityModel.Tokens.EncryptedSecurityTokenHandler.ReadToken(XmlReader reader) +253
   Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ReadToken(XmlReader reader) +105
   Microsoft.IdentityModel.Web.TokenReceiver.ReadToken(String tokenXml, XmlDictionaryReaderQuotas readerQuotas) +282
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +312
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +1099462
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171**

Les journaux Windows montrent qu'en ce moment-là, nous recevons un tel avertissement - comme je l'ai suggéré entièrement coréé avec l'erreur de la page d'erreur du serveur

Log Name:      Application
Source:        ASP.NET 2.0.50727.0
Date:          3/23/2011 2:05:50 PM
Event ID:      1309
Task Category: Web Event
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      machine-name
Description:
Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 3/23/2011 2:05:50 PM 
Event time (UTC): 3/23/2011 2:05:50 PM 
Event ID: 356af0be20744d15bba97111f6bbd475 
Event sequence: 7 
Event occurrence: 6 
Event detail code: 0 

Application information: 
    Application domain: /appl-domain/ClaimsAwareWebAppWithManagedSTS-1-129453622903756000 
    Trust level: Full 
    Application Virtual Path: /ClaimsAwareWebAppWithManagedSTS 
    Application Path: C:\tools\AdvantageSso\Using Managed STS\ClaimsAwareWebAppWithManagedSTS\ 
    Machine name: machine-name 

Process information: 
    Process ID: 3840 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: NotSupportedException 
    Exception message: The private key does not support the exchange KeySpec. 

Request information: 
    Request URL: https://app-url/ClaimsAwareWebAppWithManagedSTS/default.aspx 
    Request path: /ClaimsAwareWebAppWithManagedSTS/default.aspx 
    User host address: host-name
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 10 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.DecryptKey(String algorithm, Byte[] keyData)
   at System.IdentityModel.Selectors.SecurityTokenResolver.SimpleTokenResolver.TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, SecurityKey& key)
   at Microsoft.IdentityModel.Tokens.EncryptedSecurityTokenHandler.ReadToken(XmlReader reader)
   at Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ReadToken(XmlReader reader)
   at Microsoft.IdentityModel.Web.TokenReceiver.ReadToken(String tokenXml, XmlDictionaryReaderQuotas readerQuotas)
   at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request)
   at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Partie avec l'utilisateur vide et isAuthenticated = false est très confus ... Cela signifie donc que nous ne faisons pas passer l'authentification OB ADFS ou cela montre les résultats actuels du site demandé

Donc, malheureusement, je ne suis pas un grand expert dans ce domaine et je me bat avec ça la semaine

Quelqu'un pourrait-il m'aider à résoudre le problème?

Merci beaucoup

Était-ce utile?

La solution

Ce qui semble se produire ici, c'est que votre confiance de la partie en matière de repos dans AD FS est configurée pour crypter ses jetons en utilisant (la partie publique de) un certificat. Cela le fait, et votre application Web essaie de les déchiffrer en utilisant la clé privée de ce même certificat.

Cependant, le certificat doit prendre en charge «l'échange de clés», et à partir de votre message d'erreur, il semble que le vôtre ne le fasse pas. Je n'ai aucune idée d'où vous avez obtenu votre certificat, mais si vous le créez par programme via Windows Com en utilisant Ix509enrollment, alors vous devez définir le Entaille pour le Ix509privatekey à Xcn_at_keyExchange.

Une chose différente dont vous avez besoin pour bien faire est de vous assurer que le certificat prend en charge la «signature du document». Pour cela, assurez-vous que le IX509ExtensionEnhancedKeyUsage Contient XCN_OID_KP_DOCUMENT_SIGNING ou 1.3.6.1.4.1.311.10.3.12.

De plus, les noms de classe COM derrière les interfaces COM ci-dessus sont documentées sur le Ix509enrollmentwebclassfactory :: createObject page.

Autres conseils

Vous devez également vérifier si l'utilisateur (service) adressant le certificat a suffisamment de droits sur la machine locale pour accéder aux certificats. C'était mon problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top