Имя: Пароль:
1C
1С v8
Подключение к HTTP-сервису с авторизацией посредством передачи клиентского SSL-сертификата
,
0 wmonref
 
09.06.23
17:50
Пытаюсь реализовать подключение следующим образом:
Сконвертировал файл .cer в .p12 сначала. Потом:

SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("C:\Program Files\OpenSSL\bin\cert.p12", "пароль"));

Соединение = Новый HTTPСоединение(Сервер,,,,,,SSL,);


Подскажите пожалуйста, есть другой способ кроме конвертирования .cer в .p12?
1 lodger
 
09.06.23
18:15
stunnel прикрутить рядом, и лазить в него без ssl
2 wmonref
 
12.06.23
12:14
Пытаюсь послать SOAP конверт следующего содержания

s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <requestSignXAdES xmlns="http://sign.server.procertum.unizeto/">
            <certificate %Сертификат в BASE64% </certificate>
            <contentType xmlns="">application/octet-stream</contentType>
            <data xmlns="">%данные%</data>
            <signatureType xmlns="">ENVELOPING</signatureType>
            <validationDataFormat xmlns="">XADES</validationDataFormat>
        </requestSignXAdES>
    </s:Body>
</s:Envelope>

Сертификат в Base64 получаю следующим образом:

СертДвоичнДанные = Новый ДвоичныеДанные("e:\Install\testq.cer");
СертБасе64 = ПолучитьСертификатBase64Строку(СертДвоичнДанные);

Функция ПолучитьСертификатBase64Строку(ДвоичнДанные) Экспорт
    
    СтрокаBase64 = Base64Строка(ДвоичнДанные);
    
    Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
    Значение = СтрЗаменить(Значение, Символы.ПС, "");
    
    Возврат Значение;

КонецФункции    


В ответ получаю 400 The SSL certificate error

ЧЯДНТ?
3 wmonref
 
12.06.23
14:49
Кстати, вставлять данные сертификата в cacert.pem тоже еще надо?
4 wmonref
 
12.06.23
22:09
Помогите пожалуйста разобраться с подключением... Всегда один и тот же ответ получаю: 400 The SSL certificate error

Порядок действий:
Получил от владельцев сайта сертификат в формате .p12
Установил сертификат для текущего пользователя.
Добавил данные в cacert.pem из инструкции по ссылке (https://www.cs-cart.ru/docs/4.3.x/manager/commerceml/1c/https/)

Код в 1С:

  ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("e:\Install\pki.p12","пароль"));
  Хост = "fglrr-site.its";
  HTTPСоединение = Новый HTTPСоединение(Хост, , , , , ,ССЛ,);    
  HTTPЗапрос = Новый HTTPЗапрос("/XAdES-TesT/Sign?WSDL");    
    
  СтрокаXML = "
        "<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/""
    |    <s:Body xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
    |        <requestSignXAdES xmlns=""http://sign.server.procertum.unizeto/"">    
    |            <certificate xmlns="">%СертБасе64%</certificate>
    |        </requestSignXAdES>
    |    </s:Body>
    |</s:Envelope>";

  СертДвоичнДанные = Новый ДвоичныеДанные("e:\Install\testq.cer");
  СертБасе64 = ПолучитьСертификатBase64Строку(СертДвоичнДанные);

  СтрокаXML = СтрЗаменить(СтрокаXML,"%СертБасе64%",СертБасе64);    
  
  HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаXML);
  Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
  Ответ = Результат.ПолучитьТелоКакСтроку();
  Сообщить(Ответ);

В результате получаю: 400 The SSL certificate error. Через браузер все работает, через Postman тоже все ок. Платформа 8.3.20.1710, обычные формы, клиент-серверная
5 Тихий омут
 
13.06.23
07:25
Может, попробовать p12 конвертнуть в pfx? Попадалась информация, что в платформе реализация SSL несколько урезанная, поэтому нужны дополнительные телодвижения. На истину не претендую:)
6 wmonref
 
13.06.23
13:48
(5) так вроде бы для подключения из 1С обязательно сертификат должен быть в формате .p12
Вот тут:
ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("e:\Install\pki.p12","пароль"));

Во всяком случае, нам выдали сначала сертификат в формате .pfx. Пробовал с ним но тщетно
7 oleg_km
 
13.06.23
14:59
А этот сертификат ГОСТ?
8 wmonref
 
13.06.23
15:32
(7) нет
9 wmonref
 
15.06.23
22:00
up!
10 wmonref
 
15.06.23
22:01
Установил сертификат в Личные для пользователя USR1CV8. Результат тот же...
11 wmonref
 
15.06.23
22:58
Кстати, если использовать
ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("e:/!work/pki.p12", "123"), Новый СертификатыУдостоверяющихЦентровФайл("e:/!work/pki.p12.pem"));
(.pem файл от того же pki.p12) то платформа выводит ошибку "Ошибка работы с Интернет:  Удаленный узел не прошел проверку"
12 wmonref
 
18.06.23
17:03
Ап
13 wmonref
 
25.06.23
18:17
Решил проблему через COMОбъект("WinHttp.WinHttpRequest.5.1")
14 lodger
 
26.06.23
12:26
суммируя (13) и (11), похоже что всё работает, просто ТС не разобрался как правильно вызывать конструктор ЗащищенноеСоединениеOpenSSL
Программист всегда исправляет последнюю ошибку.