Имя: Пароль:
1C
1С v8
Как правильно добавить цифровой сертификат SLL при соединении через web-сервис?
,
0 ilou
 
22.10.11
19:50
Определение = Новый WSОпределения(...);
Прокси = Новый WSПрокси(Определение,...);
далее пытаюсь получить результат функции А = Прокси.GetVersion();

по причине:
Ошибка SOAP сервера:  Authorization error

сертификат получен и засунут в файл ...bin\cacert.pem по идее вроде все что написано на диске ИТС, но что-то не срабатывает.

Может у кого были подобные проблемы, как обошли?
1 oleg_km
 
22.10.11
21:04
Вот я так до конца и не понял: в файл cacert.pem суется сертификат сервера или клиента. Вроде как сервера, а клиентский сертификат 1С не поддерживает, потому то клиентский сертификат должен содержать закрытый ключ, а закрытый ключ должен находиться в СКЗИ, а у 1С не СКЗИ. Я понял это как то так, но с удовольствием послушал бы тех, кто разобрался в этом вопросе. Пока сделал через WinHTTP
2 acsent
 
22.10.11
21:05
веб сервисы не поддерживают соединение через ssl
3 Fragster
 
гуру
22.10.11
21:20
(2) ?
4 ilou
 
22.10.11
21:50
Вот выдержка с ИТС:

"Чтобы сертификат сервера был принят клиентом, нужно поместить его или сертификат Центра Сертификации, выдавшего данный сертификат сервера, в файл cacert.pem, который находится в каталоге bin "1С:Предприятия". В этом файле перечислены все сертификаты, которым доверяет данный клиент. Файл имеет формат PEM (Privacy Enhanced Mail) - текстовый формат, в котором сертификаты закодированы в base64 последовательности."
5 oleg_km
 
23.10.11
10:23
(4) Ну да, это сертификат сервера. А в данном случае судя по всему требуетсяи сертификат клиента, а 1С этого не умеет делать, как я понимаю
6 Fragster
 
гуру
23.10.11
12:14
(5) этим занимается веб сервер
7 oleg_km
 
23.10.11
12:22
(6) Чем "этим" занимается веб-сервер? Чтобы запустить SSL в обоюднай авторизацией нужно чтобы со стороны клиента был указан сертификат с закрытым ключем клиента и сертификат сервера, и со стороны сервера должно быть тоже самое.
8 Fragster
 
гуру
23.10.11
12:24
(7) когда 1с обращается к веб сервису - она клиент, когда кто-то обращается к веб сервису - сервер - это IIS или апач, который уже вызывает 1С. соответственно, во втором случае - SSLем будет заниматься веб-сервер, а не 1с.
9 Fragster
 
гуру
23.10.11
12:24
когда кто-то обращается к веб сервису =
когда кто-то обращается к нашему 1сному веб сервису -
10 ilou
 
23.10.11
12:58
Но ведь 1С как-то сертификаты, то смотрит, если например убрать сертификат из файла: cacert.pem

то при вызове функции web-сервиса он пишет.
 Peer certificate cannot be authenticated with known CA certificates
а при наличии сертификата в файле:
 Ошибка SOAP сервера:  Authorization error
11 Fragster
 
гуру
23.10.11
13:16
(10) ты напиши, что ты делаешь, хоть - из 1с вызываешь веб сервис, или откуда-то вызываешь 1сный веб сервис
12 ilou
 
23.10.11
14:23
и может быть кто знает, что вот эта часть сертификата значит:

MD5 Fingerprint=74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93
Certificate:
   Data:
       Version: 1 (0x0)
       Serial Number:
           02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0
13 ilou
 
23.10.11
14:23
(11)
Определение = Новый WSОпределения("http://soap.direct.yandex.ru/wsdl/v4");
   Прокси = Новый WSПрокси(Определение,"API","YandexAPIService","APIPort");
   а1 = Прокси.GetVersion();
14 ilou
 
24.10.11
12:29
подниму, что ли может быть еще кто-то подскажет в чем может быть проблема...
15 ilou
 
24.10.11
20:51
up
16 DmitrO
 
25.10.11
10:49
(0)Не получится работать с Яндекс.Директ API из 1С с помощью встроенного SOAP клиента (WSПрокси). Причины в следующем.
Для работы с этим сервисом яндекса нужна авторизация.
По документации Яндекс.Директ API она может быть сделана двумя способами: 1)авторизационный токен; 2)персональный сертификат.

Для того чтобы использовать авторизационный токен необходимо указание данных (пользователь, токен, идентификатор приложения) в заголовке SOAP запроса (SOAP-ENV:Header). 1С это не поддерживает, в заголовки вообще нет доступа.

Авторизацию по персональному сертификату 1С в SOAP клиенте (WSПрокси) тоже не поддерживает.

На данный момент в 1С SOAP клиенте поддерживается SSL только в части защиты канала (шифрования трафика по https). Для этого достаточно добавить серверный сертификат в файл cacert.pem. А авторизация в рамках защищенного канала может быть и простой (basic), видимо в 1С посчитали что этого будет достаточно.
17 DmitrO
 
25.10.11
11:00
Тем не менее задачу решить можно используя просто HTTPСоединение (https поддерживается) и способ авторизации: авторизационный токен. При этом придется самому строить SOAP запросы, что вобщем-то не так уж и сложно.