Имя: Пароль:
1C
1С v8
HTTPСоединение + https + сертификат
0 zak555
 
15.07.11
13:37
Есть сертификат sert.p12

Установил сертификат

Захожу на web
http://web/
выбираю сертификат установленный
получаю таблицу

как её распарсить ?
1 zak555
 
15.07.11
13:39
wget'ом знаю, как получить

а как из 8.2 ?
2 zak555
 
15.07.11
13:40
как реализовать аутентификацию пользователей по клиентским SSL сертификатам ?
3 smaharbA
 
15.07.11
13:43
(2) в 8.2 СП написано, что хттпс работает, но как не вкурсе - восьмерку тока осваявываю и то только по форуму, платформа есть только базовая и та далеко (
4 zak555
 
15.07.11
13:43
вот, что нашёл в СП, пример :


// инициализируем объект для записи XML
ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request
ОбъектЗапись.ЗаписатьНачалоЭлемента("Request");

// выводим элемент ClientInfo
ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo");
ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя);
ОбъектЗапись.ЗаписатьКонецЭлемента();

Если ИмяФайлаСертификата <> Неопределено Тогда

   // кодируем в Base64 сертификат
   ДвДанные.Прочитать(ИмяФайлаСертификата);
   ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64();
   
   // выводим элемент Certificate
   ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate");
   ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
   ОбъектЗапись.ЗаписатьКонецЭлемента();
   
КонецЕсли;

Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда

   // кодируем в Base64 зашифрованный контейнер
   ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера);
   ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64();
   
   // выводим элемент Data
   ОбъектЗапись.ЗаписатьНачалоЭлемента("Data");
   ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64);
   ОбъектЗапись.ЗаписатьКонецЭлемента();
   
КонецЕсли;

// записываем конец для корневого элемента
ОбъектЗапись.ЗаписатьКонецЭлемента();

ОбъектЗапись.Закрыть();

АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru";
РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", "");

// устанавливаем соединение с сервером
Попытка
   Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
   Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
       + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
   Возврат;
КонецПопытки;

// посылаем запрос
ФайлРезультата = ПолучитьИмяВременногоФайла();
Попытка
   Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, РесурсНаСервере, ФайлРезультата);
   Соединение = Неопределено;
Исключение
   Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;
5 zak555
 
15.07.11
13:44
вот где реализован этот код ?
6 zak555
 
15.07.11
13:47
вот что такое : ДвДанные ???
7 smaharbA
 
15.07.11
13:47
двоичные данные
8 zak555
 
15.07.11
13:49
(7)

ДвДанные = Новый ДвоичныеДанные

???
9 smaharbA
 
15.07.11
13:50
х.з. в восьмерке дуб-дубом
10 zak555
 
15.07.11
13:51
я не знаю, что тогда прочитать

ибо у Двочных данных нет это метода
11 zak555
 
15.07.11
13:52
> ПолучитьСтрокуBase64

вот это что ?
12 zak555
 
15.07.11
13:52
в 8.2.13.205 нету такого =(
13 GenV
 
15.07.11
13:59
(10) В принципе, двоичные данные другими методами можно в Base64 преобразовывать. Base64Строка, Base64Значение. По-моему так.
14 zak555
 
15.07.11
14:00
(13) так я пытаюсь понять пример (4) из СП
15 zak555
 
15.07.11
14:00
я ж 7шник =)
16 GenV
 
15.07.11
14:04
(14) Может раньше так было в 8.0 или в 8.1, уже не помню.

ДвДанные.Прочитать(ИмяФайлаСертификата); - ДвДанные = Новый ДвоичныеДанные(ИмяФайлаСертификата);

ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64(); - Base64Строка(ДвДанные);
17 zak555
 
15.07.11
14:05
(16) жесть
18 zak555
 
15.07.11
14:06
только я не понял
мне из sert.p12 доставать сертификат и контейнер ?
19 GenV
 
15.07.11
14:20
(18) Посмотри в типовых (например БП) обработку "ДокументооборотСКонтролирующимиОрганами". Может что подсмотришь похожее. Твой пример скорее всего оттуда. Там тоже есть ДвДанные = ... )
20 GenV
 
15.07.11
14:23
19+ этот метод из внешней компоненты.
21 zak555
 
15.07.11
14:30
(19) открыл

изверги песали
22 zak555
 
15.07.11
14:36
Функция СоздатьОбъектДляРаботыСДвоичнымиДанными(ТихийРежим = Ложь) Экспорт
   
   Если КомпонентаЗагружена = Ложь Тогда // попытка загрузки компоненты завершилась неудачно
       Возврат Неопределено;
   ИначеЕсли КомпонентаЗагружена = Неопределено Тогда // компонента на загружалась
       Если НЕ ЗагрузитьКомпонентуОбменаСНалоговымиОрганами() Тогда
           Возврат Неопределено;
       КонецЕсли;
   КонецЕсли;
   
   Попытка
       ДвоичныеДанные = Новый("Addin.BinaryDataS");
       ДвоичныеДанные.НеВыводитьСообщенияОбОшибках = Ложь;
       Возврат ДвоичныеДанные;
   Исключение
       Если НЕ ТихийРежим Тогда
           Сообщить("Не удалось создать объект для работы с двоичными данными:", СтатусСообщения.Важное);
           Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
       КонецЕсли;
       Возврат Неопределено;
   КонецПопытки;
   
КонецФункции

ДвДанные = СоздатьОбъектДляРаботыСДвоичнымиДанными();
23 zak555
 
15.07.11
14:46
ExtIntgr.dll

эта фигня только для windows ?
24 zak555
 
15.07.11
15:20
{Форма.Форма.Форма(27)}: Ошибка при вызове метода контекста (ЗаписатьТекст)
   ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
Несоответствие типов (параметр номер '1')


ФайлСертификатаBase64 = Base64Значение(Куда +  "sert.crt");
25 zak555
 
15.07.11
15:20
почему так ?
26 GenV
 
15.07.11
15:26
(24) У тебя строка сохраняется. Причем из двоичных данных которые формируются на основании файла (так понимаю имя файла - Куда +  "sert.crt").

ДвДанные = Новый ДвоичныеДанные(Куда +  "sert.crt");
ФайлСертификатаBase64 = Base64Строка(ДвДанные);
27 zak555
 
15.07.11
15:29
28 zak555
 
15.07.11
15:31
Глобальный контекст (Global context)
Base64Строка (Base64String)
Синтаксис:

Base64Строка(<Значение>)
Параметры:

<Значение> (обязательный)

Тип: ДвоичныеДанные. Двоичные данные, которые необходимо закодировать по алгоритму base64.
Возвращаемое значение:

Тип: Строка.
Описание:

Получает строку, закодированную по алгоритму base64.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
29 zak555
 
15.07.11
15:31
(26) мне нужно получить строку ? или расшифровать файл сертификата ?
30 GenV
 
15.07.11
15:33
(29) Согласно примера у тебя формируется файл XMl в котором в виде строки (закодированной в Base64) сохраняется файл сертификата.
31 zak555
 
15.07.11
15:36
{Форма.Форма.Форма(40)}: Ошибка при вызове метода контекста (ЗаписатьТекст)
   ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
по причине:
Несоответствие типов (параметр номер '1')


    Сертификат =   Куда +  "sert.crt";
    ЗакрытыйКлюч = Куда +  "sert.key";
   
       
   _ФайлЗашифрованногоКонтейнераBase64 = Новый ДвоичныеДанные(ЗакрытыйКлюч);
   _ФайлСертификатаBase64 = Новый ДвоичныеДанные(Сертификат);
   
   ФайлЗашифрованногоКонтейнераBase64 = Base64Значение(_ФайлЗашифрованногоКонтейнераBase64);
   ФайлСертификатаBase64 = Base64Значение(_ФайлСертификатаBase64);
32 GenV
 
15.07.11
15:41
(31) Прикалываешься? Base64Строка. Уже два раза пример написал ... Base64Значение возвращает ДвоичныеДанные из строки.
33 zak555
 
15.07.11
15:51
(32) т.е. мне надо получить строку из сертификата сначала ?!
34 GenV
 
15.07.11
15:58
(33) Сначала твой сертификат (файл) сохраняется как двоичные данные (в памяти). Потом он преобразуется из двоичных данных в строку Base64, пригодную для записи в XML.
35 zak555
 
15.07.11
16:00
> Сначала твой сертификат (файл) сохраняется как двоичные данные (в памяти)

как ? не понял
36 GenV
 
15.07.11
16:14
(35)
_ФайлСертификатаBase64 = Новый ДвоичныеДанные(Сертификат);
теперь файл в памяти (ФайлСертификатаBase64) в виде двоичных данных. Ты его можешь преобразовать в строку, можешь сохранить в ХранилищеЗначения в базу.
37 zak555
 
02.08.11
13:14
стал ковырять в БП обработку ДокументооборотСКонтролирующимиОрганами
так там просто по почте отправляется зашаифрованный файл
38 zak555
 
02.08.11
14:06
+ как узнать, какой должен быть заголовок запроса ?
39 zak555
 
02.08.11
20:47
!вверх!
40 zak555
 
02.08.11
22:17
GenV приди
41 GenV
 
03.08.11
02:14
(40) Ради интереса поискал инфу по теме.
1) Общая информация по HTTP в 1С: http://forum.aeroion.ru/viewtopic.php?p=2089#2089
Получение файлов соотв. методом "Получить"
2) Использование HTTPS соединения определяется последним параметром конструктора HTTPСоединение
3) По поводу использования сертификата проверить не могу - нет такого сайта. Не нашел подтверждений работоспособности, только: v8: HTTPS соединение (сертификаты) - порядок конвертации
42 zak555
 
03.08.11
06:47
ещё раз внимательно стал смотреть ДокументооборотСКонтролирующимиОрганами

там передаётся всё не по https (!)
43 zak555
 
03.08.11
07:12
на ИТС даже нету
44 GenV
 
03.08.11
09:43
45 zak555
 
03.08.11
10:52
GenV идея в том, чтоб этот запрос можно получать не только на windows-машинах
46 zak555
 
03.08.11
10:53
+ и использовать только платформу 1с
47 zak555
 
03.08.11
10:55
т.е. понятно, что можно будет запускать wget и на unix-платформах
48 zak555
 
04.08.11
13:15
что-то ошибка какая-то

Ошибка работы с Интернет:  Couldn't resolve host name
49 zak555
 
04.08.11
13:22
вернее такая :

Ошибка работы с Интернет:  Peer certificate cannot be authenticated with known CA certificates
50 zak555
 
04.08.11
13:31
кстати, какое имя заголовка писать в cacert.pem ?

sert
с пробелом и без не катит
51 zak555
 
05.08.11
06:07
?
52 zak555
 
13.08.11
06:52
!
53 Stilet
 
13.08.11
11:08
Сертификат передать не получится. Сам эту тему изучал, задавал вопрос тех. поддержке 1С.
Используй либо curl, либо на инфостарте есть платная внешняя компонента для передачи сертификата (1000 руб)
54 zak555
 
17.08.11
00:10
(53) других вариантов нет ?
55 zak555
 
25.08.11
08:43
Основная теорема систематики: Новые системы плодят новые проблемы.