Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2010(UTC) Сообщений: 13
|
Разрабатываю приложение, которое общается с Крипто-Про через SOAP. Для разработки используется MS Soap toolkit версии 3.0. Делаю все в точности как с примером из Руководства программиста: Код:
#import "msxml4.dll"
#import "mssoap30.dll" exclude("IErrorInfo", "IStream", "ISequentialStream", "_LARGE_INTEGER", "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
#define serviceURL L"https://localhost/RA/RA.wsdl"
#define adminCertName L"CURRENT_USER\\My\\Администратор"
...
HRESULT hr;
CComQIPtr < MSSOAPLib30::ISoapClient, &__uuidof(MSSOAPLib30::ISoapClient) > oSoap;
hr = oSoap.CoCreateInstance (__uuidof(MSSOAPLib30::SoapClient30));
hr = oSoap->MSSoapInit (serviceURL, L"RA", L"CertViewSoapPort", L"");
CComDispatchDriver oDisp;
hr = oSoap->QueryInterface(&oDisp);
oSoap->ConnectorProperty[L"SSLClientCertificateName"] = adminCertName;
oSoap->ConnectorProperty[L"UseSSL"] = CComVariant(true);
oSoap->ConnectorProperty[L"Timeout"] = CComVariant(long(60000));
DISPID dispID;
hr = oDisp.GetIDOfName(L"GetCACertificate", &dispID);
В строке hr = oSoap->MSSoapInit (serviceURL, L"RA", L"CertViewSoapPort", L""); возникает исключение, из-за того что функция MSSoapInit вернула E_INVALIDARG. И при этом в системном журнале событий появились 3 события-ошибки: Soap error: XML Parser failed at linenumber 0, lineposition 0, reason is: System error: -2146697191. Soap error: Loading of the WSDL file failed. Soap error: One of the parameters supplied is invalid.. При этом Центр регистрации прекрасно работает. COM объект oSoap создается, но инициализация не проходит. Не подскажите в чем может быть дело?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
В сертификате вебсервера ЦР CN именно localhost? Вообще, URL L"https://localhost/RA/RA.wsdl" из браузера открывается без каких-либо ошибок или дополнительных запросов? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2010(UTC) Сообщений: 13
|
URL "https://localhost/RA/RA.wsdl" открывается, но с ошибкой сертификата. CN сертификата веб сервера такой: aetpca.cp.ru Если поменять URL на "https://aetpca.cp.ru/RA/RA.wsdl" то инициализация проходит нормально. Как тогда сделать локальное обращение к цетру регистрации?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Сделать ему сертификат с CN localhost или обращаться по тому имени, что прописано в текущем сертификате. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2010(UTC) Сообщений: 13
|
Хорошо, спасибо. Еще одна ошибка из того же примера: Код:
hr = oDisp.GetIDOfName(L"GetCACertificate", &dispID);
CComVariant vType(long(0));
hr = oDisp.Invoke1 (dispID, &vType, vCert);
в первой строке dispID равно 11, но в последней строке возвращается значение 0x80092004 Объект или свойство не найдено. Пробовал с другими функциями из того же порта, результат тот же.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Скорее всего проблема с клиентским сертификатом. Поставьте пароль на контейнер и посмотрите - будет появляться окно при вызове Invoke или нет. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2010(UTC) Сообщений: 13
|
У меня много контейнеров, подскажите какой именно контейнер используется при соединении через SOAP. Если проблема в клиентском сертификате, то можно ли взять сертификат пользователя Крипто-Про, куда его установить и какое потом правильное свойство oSoap->ConnectorProperty[_T("SSLClientCertificateName")] необходимо указать для правильной аутентификации?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2010(UTC) Сообщений: 13
|
Получилось! Использовал тот сертификат, который использует IE для доступа к Цитата:https://aetpca.cp.ru/RA/RA.wsdl И тогда все заработало. Спасибо за помощь.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.07.2010(UTC) Сообщений: 13 Откуда: Chelyabinsk
Поблагодарили: 1 раз в 1 постах
|
Цитата:Получилось! Использовал тот сертификат, который использует IE И в итоге, в каком виде вы задавали свойство: oSoap->ConnectorProperty[_T("SSLClientCertificateName")] У меня аналогичная проблема, dispID равно 11, а oDisp.Invoke1 возвращает "x80092004 Объект или свойство не найдено". На компе два контейнера, поставил пароли на оба, но никаких изменений не заметил, в том числе когда захожу через IE. Я так понимаю, поиск ведется среди всех сертификатов в Личном хранилище пользователя Администратор, т.е. указывать конкретный сертификат не обязательно что ли. Как только не пробовал: oSoap->ConnectorProperty[_T("SSLClientCertificateName")] = CURRENT_USER\\My\\имя_контейнера; oSoap->ConnectorProperty[_T("SSLClientCertificateName")] = имя_контейнера; oSoap->ConnectorProperty[_T("SSLClientCertificateName")] = "путь до файла .cer"; Отредактировано пользователем 8 июля 2010 г. 18:41:05(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
SSLClientCertificateName - это имя сертификата в формате CURRENT_USER\LOCAL_MACHINE\store-name\cert-name, к имени контейнера никак не привязанное. А cert_name (из MSDN) это Цитата:CERT_NAME_SIMPLE_DISPLAY_TYPE Iterates through the following list of name attributes and uses the Subject Name or the Subject Alternative Name extension for the first occurrence of: szOID_COMMON_NAME, szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME, or szOID_RSA_emailAddr.
If one of these attributes is not found, uses the Subject Alternative Name extension for a rfc822Name choice. If there is still no match, uses the first attribute |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close