Имя: Пароль:
1C
1С v8
Включение своего сертификата в список доверенных для 1С в файл cacert.pem
,
0 roman2
 
19.05.12
18:29
Тема сложная. Прошу не знающих не писать.
Есть задача передать файл на web-сервис по https протоколу методом post.
Для этого использую у HTTPСоединение метод ОтправитьДляОбработки.

Что я делаю:
1. Обращаюсь на web-сервис через браузер. Сохраняю сертификат в файл.
2. Полученный сертификат преобразую в текстовый формат командой
openssl x509 -inform der -in D:\mycert.cer -out D:\textcert.pem -text -fingerprint -md5
3. Полученный текстовый сертификат добавляю в конец файла C:\Program Files (x86)\1cv82\8.2.15.301\bin\cacert.pem

В результате запуска своего кода в 1С получаю ошибку
Peer certificate cannot be authenticated with known CA certificates

То ли я не верно провел работу с добавлением сертификата в файл cacert.pem, то ли иду вообще не в ту сторону...

Помогите плиз, вопрос важный, готов выплатит вознаграждение за решение моей проблемы. Заранее благодарен. Можете писать на почту. Решение должно быть сегодня-завтра.
1 Wobland
 
19.05.12
18:32
(0) в понедельник могу что-то попытаться. сталкивался с похожим, материалы на работе. стучись в аську, если что
2 kabanoff
 
19.05.12
19:22
3 roman2
 
19.05.12
23:24
обновляю тему....
4 pumbaEO
 
19.05.12
23:49
делал недавно через stunnel (получение почты по IMAP +SSL да еще самоподписанный сертификат от сисадминов) не жалею.
5 roman2
 
19.05.12
23:53
(4) можно ссылки на изучение?
6 roman2
 
20.05.12
10:10
может кто еще поможет?
7 roman2
 
20.05.12
19:10
...
8 oleg_km
 
20.05.12
19:19
WinHTTP не предлагать? Там все решается за полчаса
9 roman2
 
20.05.12
20:46
(8) предлагать. Очень жду пример.
10 oleg_km
 
20.05.12
21:00
Уже давно можно было бы найти поиком на мисте или msdn.com
Мой пример:

ИмяСертификата = "Пользователь как в mmc сертификаты";
АдресВебСервиса = "https://filials.payment.ru:9443/OLWSWM/services/OLWS?WSDL";
//    АдресВебСервиса = "https://filials.payment.ru:9443/JuridicalWS/services/IJuridicalWS?WSDL";
   
обИнтернет = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
обИнтернет.SetClientCertificate(ИмяСертификата);

// Получить настройки
обИнтернет.Open("GET", АдресВебСервиса, Ложь);
обИнтернет.Send();
Сообщить(обИнтернет.ResponseText);

Это если тебе нужен и сертификат клиента, если только серверный, то вообще ничего не нужно.
11 roman2
 
20.05.12
21:14
(10) я это нашел. Только ошибка сохраняется. Вероятно сам веб-сервер может с проблемой. Или я неверно прописал сертификат у себя.
Вот мой код.

   WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
   WinHttp.Option(2,"Windows-1251");
   WinHttp.SetClientCertificate("localhost");
   
   WinHttp.Open("POST","https://77.75.168.197:8008/WebServices/WebApi.asmx",0);
   
   WinHttp.SetRequestHeader("Accept-Language", "ru");
   WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
   WinHttp.setRequestHeader("Content-Language", "ru");
   WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
   WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
   
   ПараметрыПОСТ = "fruit3=apple777";
   
   WinHttp.Send(ПараметрыПОСТ);
   
   Текст = Новый ЗаписьТекста("C:\temp\result.txt", КодировкаТекста.UTF8);
   Текст.ЗаписатьСтроку(WinHttp.ResponseText());
   Текст.Закрыть();
12 roman2
 
20.05.12
21:16
Прошу знающих указать на возможные ошибки.
13 oleg_km
 
20.05.12
21:34
Так а что он выдает (WinHTTP)
14 oleg_km
 
20.05.12
21:35
Он похоже просто не фурыкает:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

D:\Program Files\Windows Resource Kits\Tools>telnet 77.75.168.197 8008
Подключение к 77.75.168.197...Не удалось открыть подключение к этому узлу, на по
рт 8008: Сбой подключения

D:\Program Files\Windows Resource Kits\Tools>
15 roman2
 
20.05.12
21:55
(14) Не пытайся подключиться туда, доступ разрешен выделенным IP
16 roman2
 
20.05.12
21:59
(13) выдает
Ошибка при вызове метода контекста (Send)
   WinHttp.Send(ПараметрыПОСТ);
по причине:
Произошла исключительная ситуация (WinHttp.WinHttpRequest): The host name in the certificate is invalid or does not match
17 oleg_km
 
20.05.12
23:17
Это регулируется флагами WinHTTP. Ты коннектишься к одному хосту, а в сертификате указан другой урл. В SetOption вроде как можно указать: игнорировать несоответствия урла и сертификата. Посмотри msdn.com. (Финал чтоли не смотришь)
18 roman2
 
21.05.12
11:55
(17) Смотрю))) С победой нас!!!
19 oleg_km
 
21.05.12
12:02
(18) не фига себе ты смотришь, уже часов 12 как все закончилось. Или повторы смакуешь?
20 oleg_km
 
21.05.12
12:06
21 roman2
 
21.05.12
12:24
(19) ну конечно в прошлом времени :))
22 roman2
 
21.05.12
12:26
(20) Как передать параметр через 1с?
Я так понмаю нужено числовое представление параметра...

Http.setOption(2, 13056);

Олег, если не трудно, кинь строку как она должна быть в 1С, чтоб отключить проверку соответсвия хоста.
23 roman2
 
21.05.12
12:56
Возвращаюсь к вопросу ветки. Возможно проблема в том что в сертификате что есть у меня не соответствует хост зашитый в сертификат и мой хост. Тогда как это обойти штатными средствами 1С?
24 mistеr
 
21.05.12
14:16
(0) >Peer certificate cannot be authenticated with known CA certificates
Немного вдумайтесь что вам пишут. "Peer certificate" это сертификат вашего узла. "CA certificate" это сертификат ЦС (центра сертификации) или корневой сертификат. По-русски будет "не могу проверить ваш сертификат узла с помощью какого-либо известного мне корневого сертификата". Известные 1С корневые и лежат в файле CACert.pem (название намекает).

В cacert.pem нужно добавлять не сертификат сайта, а тот, которым он подписан. А возможно еще и тот, которым подписан последний (цепочка может быть длинной).
25 roman2
 
21.05.12
19:10
(24) спасибо, точно тороплюсь, время поджимает
26 oleg_km
 
21.05.12
22:44
Там точно обоюдная авторизация? Если просто IE открывать он запрашивает твой сертификат с секретным ключем? Мне почему-то кажется просто левый сертификат сервера:

Произошла исключительная ситуация (WinHttp.WinHttpRequest): The host name in the certificate is invalid or does not match
27 roman2
 
22.05.12
11:14
(26) Как оно должно быть по IT-понятиям? ))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан