|
Подключение по API к сайту с SSL | ☑ | ||
---|---|---|---|---|
0
MMC_user
naïve
28.11.24
✎
13:17
|
Всем добрый день.
Имеется сайт, к которому нужно подключиться по API. Проблема в том, что на сайте установлен сертификат, из-за которого подключиться не удаётся. Т.е. если входить под учеткой на сайт, всё нормально, а вот если пытаться подключиться по API, то всё время выходит 401. Код такой: СоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл(ИмяФайлаСертификата)); Соединение = Новый HTTPСоединение("АдресСервера", , , , , , СоединениеOpenSSL, Истина); ЗапросHTTP = Новый HTTPЗапрос("/api/vX/login?login=User&password=12345",); Ответ = Соединение.Получить(ЗапросHTTP); Сертификат в формате *.pem. Пробовал и без него, всё равно подключиться не получается. Сертификат добавил в файл cacert.pem. Пробовал передавать логин/пароль для подключения в заголовки HTTP-запроса, затем вызывать следующий метод - не работает. Да и в целом, много всего было уже испробовано... В качестве альтернативы уже рассматривал также и WinHttp.WinHttpRequest.5.1. Нашел на мисте ветку с примером кода от smaharbA, как включить опцию игнорирования сертификатов у этого объекта. Как с помощью WinHTTP можна получить фотографию в пользовательском режиме 1С#23 Но у меня в функции "ПолучитьОбертку()" почему-то программа ругается на свойство "script" объекта "Док" в ней. Что надо, не понимаю. Установил сертификат на сервер, попробовал его указать для WinHttpRequest посредством метода setClientCertificate по имени (имя присвоил в консоли оснастки) - говорит "Имя узла в сертификате недопустимо либо не соответствует". Подскажите, пожалуйста, что можно сделать, чтобы удалось подключиться? |
|||
1
Asmody
28.11.24
✎
14:06
|
А если серт в хранилище Windows добавить и, соответственно, конструктор ЗащищенноеСоединениеOpenSSL() поправить?
|
|||
2
MMC_user
naïve
28.11.24
✎
14:14
|
(1) Сертификат установлен в доверенные корневые центры сертификации. При указании в защищенном соединении параметра "Новый СертификатКлиентаWindows" всё равно выдает 401.
|
|||
3
mikecool
28.11.24
✎
14:33
|
(2) а его точно именно в корневые надо было установить?
|
|||
4
MMC_user
naïve
28.11.24
✎
14:37
|
(3) Насчет этого ни от кого никаких указаний не было. Полагаете, 1С может его не видеть из-за того, что его в другое хранилище надо было установить?
|
|||
5
mikecool
28.11.24
✎
15:50
|
(4) точно не знаю, но обычно при проверке серта обработкой Контура достаточно добавить серт в Личное
|
|||
6
mikecool
28.11.24
✎
15:51
|
а корневые
- это обычно центры, которые выдают сертификаты - от них строится цепочка |
|||
7
eklmn
гуру
29.11.24
✎
09:23
|
имхается мне что серт тут вообще ни при чем, ошибка в коде
|
|||
8
Dzenn
гуру
29.11.24
✎
09:29
|
Не очень понимаю, причём тут сертификат с твоей стороны. Не знаю ни одного АПИ, которое для обращения к себе требовало бы сертификата. Дело не в сертификате, дело в том, что ты неверно авторизовываешься, и именно об этом тебе и говорит ошибка 401. Авторизация — это обычно поле заголовка. В зависимости от типа авторизации, в заголовке либо токен в определённом формате, либо сочетание юзера/пароля тоже в определённом формате — чаще всего одно из двух, но бывают и другие варианты. Узнавай у поставщика сервиса, какой вид авторизации он требует и в каком формате ты должен его предоставлять. Можешь посоветоваться также с чатгпт, он в таких темах рубит.
|
|||
9
Dzenn
гуру
29.11.24
✎
09:59
|
В любом случае не думаю, что авторизация выглядит как "/api/vX/login?login=User&password=12345"
|
|||
10
Spyke
29.11.24
✎
10:21
|
(0) 1) Попробуй сконвертировать сертификат в pfx
2) Обычно если авторизация базовая по логин и пароль то в заголовках должнен передаваться Base64 Логин + ":" + Пароль + признак базовой авторизации обычно "Basic " |
|||
11
Spyke
29.11.24
✎
10:21
|
+(10) ДанныеАвторизации = ДополнительныеСервисныеВозможности.СоздатьСтрокуBase64
(НастройкиПодключения.Логин + ":" + НастройкиПодключения.Пароль); ДанныеАвторизации = СтрЗаменить(ДанныеАвторизации, "77u/", ""); ДанныеАвторизации = "Basic " + ДанныеАвторизации; Возврат ДанныеАвторизации |
|||
12
Spyke
29.11.24
✎
10:49
|
(8) Пример: сервис "Подели" от Альфа-банка
|
|||
13
Тихий омут
29.11.24
✎
11:31
|
+(12) Прямая интеграция СБП этого же банка - то же самое.
ОбъектСертификата=Новый СертификатКлиентаФайл(мПараметрыДрайвера.РасположениеФайлаПриватногоКлюча); СоединениеOpenSSL=Новый ЗащищенноеСоединениеOpenSSL(ОбъектСертификата); Соединение = Новый HTTPСоединение(мПараметрыДрайвера.ПромышленныйСерверAPI, мПараметрыДрайвера.ПортПромышленногоСервераAPI, СокрЛП(мПараметрыДрайвера.ЛогинПроцессинговогоШлюза), СокрЛП(мПараметрыДрайвера.ПарольПроцессинговогоШлюза), , , СоединениеOpenSSL); |
|||
14
MMC_user
naïve
29.11.24
✎
12:50
|
Коллеги, добрый день!
Всем спасибо за рекомендации. К сожалению, всё пока не успел прочитать. Буду пробовать. |
|||
15
Garykom
гуру
29.11.24
✎
13:02
|
начать с чтения мануалов от АПИ
и примеров кода/работы не из 1С |
|||
16
бегинер
29.11.24
✎
13:59
|
+попробуй подключиться через postman (это не из 1С), как добьешься подключения - далее уже пробуй через 1С
|
|||
17
MMC_user
naïve
29.11.24
✎
15:29
|
(16) В postman удалось подключиться по адресу сервера, с указанными в (0) логином и паролем. Ответ такой:
https://cloud.mail.ru/public/jzf9/LSfgKLRbF Но такого результата я уже смог добиться и в 1С. Допустим, мы залогинились успешно, дальше надо вызвать другой метод API. А как это сделать? |
|||
18
MMC_user
naïve
29.11.24
✎
16:37
|
+Еще в postman при вызове непосредственно нужного мне метода API при отключенном значении настройки "Enable SSL certificate verification" ответ 401. Если же включить эту настройку - выдает "SSL Error: Certificate has expired". Но срок сертификата действительно уже истек. Получается, единственное решение - это поставить на сервере API сертификат с более актуальным сроком?
|
|||
19
Garykom
гуру
30.11.24
✎
02:17
|
(17) апи метро для мобильного расковыриваешь?
|
|||
20
MMC_user
naïve
30.11.24
✎
16:23
|
(19) Нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |