|
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
|
(41)+ можешь еще попробовать через WinHttpRequest:
1С+HTTPS+SSL+Цифровой сертификат X.503 v3 http://msdn.microsoft.com/en-us/library/aa384106(v=VS.85).aspx |
|||
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |