Закрытый ключ не поддерживает обмен KeySpec во время ответа ADFS2.0 - PullRequest
0 голосов
/ 23 марта 2011

Есть такая проблема

У нас есть претензии к сайту asp.net и серверу adfs, настроенным для этого сайта

Итак, у нас есть - мы запускаем наше веб-приложение - перемещаемся для аутентификации на сервер adfs и возвращаемся обратно на веб-сайт - в результате мы имеем страницу сервера ошибок с URL нашего сайта

**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**

Журналы Windows показывают, что в это время мы получаем такое предупреждение - как я предположил, полностью связано с ошибкой со страницы ошибки сервера

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)

Часть с пустым пользователем и IsAuthenticated = false очень запутана ... Значит ли это, что мы не передаем аутентификацию в ADFS или она показывает текущие результаты запрошенного сайта

Так что, к сожалению, я не большой специалист в этой области и борюсь с этим ни разу на неделю

Может кто-нибудь помочь мне решить проблему?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Здесь, похоже, происходит то, что ваше доверие проверяющей стороны в AD FS настроено для шифрования его токенов с использованием (публичной части) некоторого сертификата. Это делает это, и ваше веб-приложение пытается расшифровать их, используя закрытый ключ того же сертификата.

Однако сертификат должен поддерживать «обмен ключами», и из вашего сообщения об ошибке похоже, что ваш нет. Я понятия не имею, откуда вы взяли свой сертификат, но если вы создаете его программно через Windows COM с помощью IX509Enrollment , то вам нужно установить KeySpec для IX509PrivateKey до XCN_AT_KEYEXCHANGE .

Еще одна вещь, которую вы должны получить, это убедиться, что сертификат поддерживает «подписание документа». Для этого убедитесь, что IX509ExtensionEnhancedKeyUsage содержит XCN_OID_KP_DOCUMENT_SIGNING или 1.3.6.1.4.1.311.10.3.12.

Кроме того, имена классов COM за вышеуказанными интерфейсами COM задокументированы на странице IX509EnrollmentWebClassFactory :: CreateObject .

0 голосов
/ 06 февраля 2018

Вам также следует проверить, имеет ли пользователь (службы), обращающийся к сертификату, достаточно прав на локальном компьютере для доступа к сертификатам. Это была моя проблема.

...