30.01.2006 17:27:55При работе WebServic'а не находится сертификат Ответов: 13
Виктор
Мне кажется вопрос простой, но почему-то не решается :-)
Есть библиотека на С++, которая инкапсулирует в себе работу с CryptoPro.
Для нее написана COM-обертка, которая используется в клиенте на C#.
Все замечательно работает.

Но пришлось задействовать ту же библиотеку через WebService (.Net).
И я стал получать ошибку, что сертификат не найден :-)

Сертификат хранился в Локальный компьютер - Личные,
а также в Текущий пользователь - Личные.

Куда следует поместить сертификат?

Заранее большое спасибо!

С уважением, Виктор
 
Ответы:
30.01.2006 20:36:43maxdm
.Net не поддерживает наших провайдеров. Ждите версию под .NET
31.01.2006 7:44:32Виктор
День добрый!

А можно комментарий по-подробнее?
Т.е. нельзя использовать ВебСервис (.Net) для подписи/проверки ЭЦП, используя COM-объект, реализующий функционал по работе с ЭЦП?
Несмотря на то, что обычное Windows-приложение (.Net) работает с этим COM-объектом нормально (и подписывает и проверяет, т.е. сертификат нормально находит)?

Заранее большое спасибо!

С уважением, Виктор
31.01.2006 10:39:01Виктор
А как обстоит дело с Java?
Т.е. есть ли возможность использовать "хоть какие-нибудь"
ВебСервисы?

С уважением, Виктор
31.01.2006 13:14:47maxdm
Возможно я не правильно понял вопрос - решил что речь идет о WSE.
По поводу сертификата - под какой учетной записью работает Ваш webservice? Соответственно, сертификат должен быть установлен для этой учетной записи.
31.01.2006 15:24:50Виктор
Пуск - Настройка - Administrative Tools - Internet Services Manager - Default Web Site - CryptoSrv - Properties - DirectorySecurity - Edit:
- стоит галочка Anonymous access (вверху)
- стоит галочка Integrated Windows authentication

Здесь ли это настраивается? Просто других настроек Security я не нашел.

Заранее спасибо!

С уважением, Виктор
31.01.2006 15:59:02maxdm
это немножко не то - относится к аутентификации пользователей на веб-сервере - нужно выяснить под какой учетной записью работает веб-сервис. Самый простой способ - вставить в код вызов функции GetUserName(), но скорее всего Ваш сервис работает под NETWORK SERVICE
31.01.2006 16:27:47Виктор
И что нужно сделать в этом случае?

Заранее спасибо!

С уважением, Виктор
01.02.2006 7:59:56Виктор
По умолчанию на WinXP/2000 веб-сервис работает под пользователем ASPNET. На Win2003 — Network Service.

И что нужно с этим поделать? :-)

Заранее большое спасибо!

С уважением, Виктор
01.02.2006 11:47:14Виктор
Прошу прощения, если я не очень внятно описываю проблему.

Но что подразумевается под фразой:
"По поводу сертификата - под какой учетной записью работает Ваш webservice?
Соответственно, сертификат должен быть установлен для этой учетной записи."

Т.е. получается, что по умолчанию на WinXP/2000 веб-сервис работает под пользователем ASPNET. На Win2003 - Network Service.

Что нужно сделать? Как установить сертификат для данной учетной записи? :-)


Возможно я не верно понимаю работу с сертифкатами из Веб-сервиса,
но вот, что я имел в виду:

Если запустить данный код из Веб-сервиса, то сертификат "Иванов" не находится:

[WebMethod]
public void SignXml()
{
// Создали СОМ-объект, который умеет подписывать
CCSignEnvelope SignEnvelope = new CCSignEnvelope();
SignEnvelope.SerializeInit();

// Установили файл, который нужно подписать
CFileStreamReader reader = new CFileStreamReader();
reader.initialize(@"D:\Temp\____0000\src.xml");
SignEnvelope.SetBody(reader);

// Собственно подпись
SignEnvelope.Sign("Иванов"); // Имя сертификата, который не находится

// Вывод результата в другой файл
CFileStreamWriter writer = new CFileStreamWriter();
writer.initialize(@"D:\Temp\____0000\res.xml");
SignEnvelope.Serialize(writer);
writer.close();
}

Если же запустить этот код в обычном методе обычного Windows-приложения,
то сертификат находится и все хорошо работает.
Сертификат хранится в Локальный компьютер - Личные,
а также в Текущий пользователь - Личные.


Если не сложно, поясните, пожалуйста.

Заранее большое спасибо!

С уважением, Виктор.
01.02.2006 11:56:23maxdm
А не находится именно сертификат или закрытый ключ к нему?
Насколько я понимаю, установить сертификат под Nework Service будет проблематично. Попробуйте или запустить asp.net под SYSTEM, или под специальной учетной записью, в хранилище сертификатов которой и устрановите требуемый сертификат.
01.02.2006 13:35:28Виктор
> А не находится именно сертификат или закрытый ключ к нему?

Сейчас буду выяснять

> Насколько я понимаю, установить сертификат под Nework Service будет проблематично. Попробуйте или запустить asp.net под SYSTEM

Изучаю матчасть :-) Не уверен, что это можно сделать.

> или под специальной учетной записью, в хранилище сертификатов которой и устрановите требуемый сертификат.

Вопрос: как установить сертификат для специальной учетной записи?

Сертификат в данный момент помещен во все хранилища, куда я его только смог поместить. В том числе и в "Текущий пользователь - Личные".

Т.е. сертификат, получается, уже установлен для специальной учетной записи? Или я что-то недопонимаю?

Заранее большое спасибо!

С уважением, Виктор
01.02.2006 14:31:39maxdm
Пользователь под которым запускается ASP.NET конфигурится в machine.config
Зайти на машину под этим пользователем и положить сертификат в его хранилище, или дать права на хранилище компьютера (сделать админом, но не рекомендую :))
01.02.2006 15:26:52Виктор
!!! Работает! Спасибо большое !!!

С уважением, Виктор