Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.12.2012(UTC) Сообщений: 49 Откуда: Москва
Сказал(а) «Спасибо»: 8 раз
|
Для подписи данных используется КриптоПро CSP 3.6.6497 КС1 3.6.5359 в сочетании с КриптоПро .NET Server 1.0.4863.0
Контейнер, список отзыва и сертификат установлены. Тестирование через оснастку КриптоПро CSP проходит корректно. На локальном месте разработчика с тем же сертификатом на IIS Express приложение работает корректно. Однако при развёртывании ASP.NET приложения на IIS 7 и на сервере, и на том же локальном месте разработчика возникает ошибка, указанная ниже. С чем может быть связана эта ошибка?
WebHost failed to process a request. Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/24002550 Exception: System.ServiceModel.ServiceActivationException: The service '/PersonalApiService.svc' cannot be activated due to an exception during compilation. The exception message is: It is likely that certificate 'CN=my.site.ru' may not have a private key that is capable of key exchange or the process may not have access rights for the private key. Please see inner exception for detail.. ---> System.ArgumentException: It is likely that certificate 'CN=my.site.ru' may not have a private key that is capable of key exchange or the process may not have access rights for the private key. Please see inner exception for detail. ---> System.Security.Cryptography.CryptographicException: Keyset does not exist
at CryptoPro.Sharpei.CPUtils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) at CryptoPro.Sharpei.CPUtils.GetKeyPairHelper(CPCspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandleCP& safeProvHandle, SafeKeyHandleCP& safeKeyHandle) at CryptoPro.Sharpei.Gost3410CryptoServiceProvider.GetKeyPair() at CryptoPro.Sharpei.Gost3410CryptoServiceProvider..ctor(CspParameters parameters) at CryptoPro.Sharpei.NetDetours.CPX509Certificate2.get_PrivateKey() at System.ServiceModel.Security.SecurityUtils.EnsureCertificateCanDoKeyExchange(X509Certificate2 certificate) --- End of inner exception stack trace --- at System.ServiceModel.Security.SecurityUtils.EnsureCertificateCanDoKeyExchange(X509Certificate2 certificate) at CryptoPro.Sharpei.ServiceModel.CPSecurityUtils.EnsureCertificateCanDoKeyExchange(X509Certificate2 certificate) at System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateServerX509TokenProvider() at System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateLocalSecurityTokenProvider(RecipientServiceModelSecurityTokenRequirement recipientRequirement) at System.ServiceModel.Security.ServiceCredentialsSecurityTokenManager.CreateSecurityTokenProvider(SecurityTokenRequirement requirement) at System.ServiceModel.Security.SecuritySessionSecurityTokenAuthenticator.SessionRenewSecurityTokenManager.CreateSecurityTokenProvider(SecurityTokenRequirement requirement) at System.ServiceModel.Security.SymmetricSecurityProtocolFactory.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) at CryptoPro.Sharpei.ServiceModel.CPServiceHostBase.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionSecurityTokenAuthenticator.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.CommunicationObjectSecurityTokenAuthenticator.Open(TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionServerSettings.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) at CryptoPro.Sharpei.ServiceModel.CPServiceHostBase.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open() at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath) at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) --- End of inner exception stack trace --- at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: kmi Для подписи данных используется КриптоПро CSP 3.6.6497 КС1 3.6.5359 в сочетании с КриптоПро .NET Server 1.0.4863.0
Контейнер, список отзыва и сертификат установлены. Тестирование через оснастку КриптоПро CSP проходит корректно. На локальном месте разработчика с тем же сертификатом на IIS Express приложение работает корректно. Однако при развёртывании ASP.NET приложения на IIS 7 и на сервере, и на том же локальном месте разработчика возникает ошибка, указанная ниже. С чем может быть связана эта ошибка?
Здравствуйте. Каким образом был установлен сертификат? При тестировании выбираете сертификат, установленный в локальное хранилище компьютера? Про права на доступ к контейнеру: Использование секретных ключей в службах Windows |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.12.2012(UTC) Сообщений: 49 Откуда: Москва
Сказал(а) «Спасибо»: 8 раз
|
Контейнер был установлен в реестре с внешнего накопителя через оснастку КриптоПро CSP. Сертификат был установлен из этого контейнера в реестр. И контейнер, и сертификат устанавливались для локальной машины.
При тестировании выбираю контейнер для локальной машины.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.12.2012(UTC) Сообщений: 49 Откуда: Москва
Сказал(а) «Спасибо»: 8 раз
|
УточнениеРабота с подписью у нас в коде состоит из нескольких стадий:
- поиск сертификата по серийному номеру;
- определение провайдера для доступа к контейнеру закрытого ключа;
- доступ к закрытому ключу и подписание данных.
Ломается на 2-м шаге. Поиск сертификата выполняется так: Код:
X509Store store = new X509Store(aStoreName, aStoreLocation); // параметры задаются в конфигурации
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509Certificate2Collection certColl = store.Certificates.Find(X509FindType.FindBySerialNumber, aSerial, false); // серийный номер задан в конфигурации
if (certColl.Count > 0)
{
return certColl[0];
}
Этот код находит сертификат всегда. Возвращается экземпляр класса System.Security.Cryptography.X509Certificates.X509Certificate2. Но если код выполняется на IIS, то при обращении к свойству PrivateKey полученного экземпляра возбуждается исключение System.Security.Cryptography.CryptographicException. Т.е. провайдер не определён. Тот же код, выполняемый на IIS Express, при обращении к PrivateKey возвращает CryptoPro.Sharpei.Gost3410CryptoServiceProvider, и подпись создаётся корректно. С чем может быть связано такое поведение? P.S. Тестирование выполнения кода на IIS и IIS Express проводилось на одной и той же машине, контейнер PK (и сертификат) один и тот же в обоих случаях. Отредактировано пользователем 30 июня 2016 г. 13:53:49(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Читали статью в FAQ? Какой пользователь в IIS? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.12.2012(UTC) Сообщений: 49 Откуда: Москва
Сказал(а) «Спасибо»: 8 раз
|
Автор: maxdm Читали статью в FAQ? Какой пользователь в IIS? В дополнительных настройках пула стоит Identity = ApplicationPoolIdentity и LoadUserProfile = true. При попытке указать пользователя в окне управления доступом к закрытому ключу возникает ошибка: "The following object is not from domain listed in the Select Location dialog box? and is therefore not valid: IIS AppPool\ASP.NET v4.0", хотя поиск идёт по локальной машине. Цитата:Также необходимо убедиться, что сертификат установлен с привязкой к контейнеру локального компьютера: в панели КриптоПро CSP в мастере тестирования контейнера при отображении ссылки на ключ должен быть виден флаг CRYPT_MACHINE_KEYSET Не совсем понял, где это смотреть. Запустил КриптоПро CSP, перешёл на вкладку Сервис, нажал "Протестировать", выбрал контейнер для локальной машины. Результаты проверки ссылки на ключ не содержат. Но "проверка завершена успешно, ошибок не обнаружено". Отредактировано пользователем 30 июня 2016 г. 14:55:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
У Вас очень старая версия CSP - там нет функциональности по отображению ссылки на ключ. Вместо ASP.NET v4.0 нужно подставить точное название пула. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.12.2012(UTC) Сообщений: 49 Откуда: Москва
Сказал(а) «Спасибо»: 8 раз
|
Автор: maxdm У Вас очень старая версия CSP - там нет функциональности по отображению ссылки на ключ. Вместо ASP.NET v4.0 нужно подставить точное название пула. Такая версия стоит у заказчика. Пока её замена затруднительна. ASP.NET v4.0 - название пула. Но даже DefaultAppPool тоже не виден.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Разбирайтесь с учетной записью. Можно поставить System в свойствах пула. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.02.2020(UTC) Сообщений: 9 Сказал(а) «Спасибо»: 1 раз
|
Доброго времени суток! Аналогичная проблема. Выше описанное пробовал не помогло.
Характеристики сервера клиента ОС: Windows Server Standart 2016 Крипто ПРО: версия продукта 4.0.9.9963 версия ядра СКЗИ 4.0.9019 КС1. ЭЦП установлено в реестр. Сертификат установлен для компьютера.
Имеется сервис на WCF, хостится на службе виндовс. Сервис запускается от имени машины.
При вызове метода сервиса, сервис должен подписывает pdf файлы и возвращает их. Файлы подписываются утилитой cppdfutil.exe. Запускается утилита из программы таким образом Process cpPdfUtil = Process.Start(utilFilePath, args);
При попытке подписать файл утилита завершает работу следующей ошибкой: Документ не подписан: Operation failed. Не удалось получить доступ к контейнеру с закрытым ключом.---[0x80090016]Keyset does not exist
При запуске утилиты из командной строки утилита отрабатывает без проблем.
Во время разработки я тестировал на сервере Windows Server 2012 R2 Standart и там все работало.
И еще момент, у клиента один диск - системный. Помогите с проблемой. Куда копать?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close