Имя: Пароль:
1C
1С v8
Чем заменить объект WinHttp.WinHttpRequest в случае сертификатов с одноименным названием?
0 ILNIK19
 
27.02.23
17:07
ВТБ в конце 2022г изменил методику выдачи сертификатов - теперь сертификаты выдают физлицу, а не организации.
В итоге все новые сертификаты теперь имеют название в виде ФИО.
Обращение в банк идет посредством xml запросов методом post через объект WinHttp.WinHttpRequest.5.1.
У этого объекта есть метод SetClientCertificate, который устанавливает сертификат в запрос и этот метод умеет искать сертификат в хранилище windows только по названию.
И получается, если у меня 50 юрлиц и куча сертификатов в том числе одноименных, то метод SetClientCertificate находит некорректный сертификат (первый попавшийся по имени) и банк выдает ошибку при запросе выписки.
Кто-то с этим сталкивался?
Есть ли альтернатива объекту WinHttpRequest?
1 Garykom
 
гуру
27.02.23
17:27
1. В 1С встроено https://infostart.ru/1c/articles/1564337/
2. https://stackoverflow.com/questions/57919942/msxml2-serverxmlhttp-clientcertificate
3. stunnel-msspi https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=16815 по сути на разных локальных портах поднять разные "прокси" с разными сертификатам и обращаться к нужному
2 Garykom
 
гуру
27.02.23
17:30
полный путь указывать пробовал?
https://learn.microsoft.com/ru-ru/windows/win32/winhttp/iwinhttprequest-setclientcertificate

аля SetClientCertificate("CURRENT_USER\My\TestCert")
3 ILNIK19
 
27.02.23
18:38
(2) все сертификаты лежат в одном месте в разделе личных
4 ILNIK19
 
27.02.23
18:46
(1) Спасибо за ответ.
Про stunnel уже находил в интернете информацию, но это те еще танцы с бубном и при 50 сертификатах...
Про встроенный hhtp сервис конечно интересно, но боюсь с втб не прокатит такой фокус "объединить файлы cert.pem и key.pem в один файл cert.p12" и потом пароль прикручивать через какую-то утилиту OpenSSL
5 Garykom
 
гуру
27.02.23
20:04
(4) с 1С там все проще через СертификатКлиентаWindows
https://master1c8.ru/integratsiya-i-obmen-dannmi/5265/
6 Garykom
 
гуру
27.02.23
20:11
(0) Эээ можно вопрос.

А зачем для одного ФИО (физика) на 50 разных юрлиц иметь 50 разных сертификатов?

Когда достаточно одного сертификата для физика + доверки на юрлица
7 Garykom
 
гуру
27.02.23
20:13
(6)+ Идея изменения была как раз в этом, чтобы не делать для физиков-сотрудников отдельные сертификаты в каждую ЮЛ/ИП
У него только один свой и все им подписывает

Ты же понимаешь что перефразирую на обычную бумажную подпись что не надо одному физику иметь много разных подписей для каждой ЮЛ/ИП где он работает ))
8 big
 
28.02.23
05:20
А нельзя ли переименовать сертификаты? Или же сделать для них (например для каждого юрлица) свои хранилища и уже искать только в этом нужном хранилище?
9 ILNIK19
 
28.02.23
09:20
(8) Сертификаты выпускает банк, мы с ним боремся уже третий месяц, чтобы они добавили в название сертификата хоть-какой уникальный номер, может быть серийник сертификата.
Они в итоге добавили серийник куда-то в реквизит сертификата - при входе в личный кабинет на сайте под сертификатом этот серийиник отображается, но это не решает проблему, если искать сертификаты программно. Название осталось прежнее.
Общаемся дальше с банком
10 ILNIK19
 
28.02.23
09:29
(6) Проблема в том, что организации подключаются к банку последовательно, а не все сразу.
Соответственно, чтобы повесить все организации на один сертификат физического лица  - нужно периодически перевыпускать сертификат по всем остальным организациям разом. Хотя сертификаты выдаются на 5 лет и руководство с департаментом безопасности против такой схемы. Плюс эти сертификаты надо поставить на куче компов (нескольким казначеям, несколько терминалов для загрузки выписок и тд).
Плюс у банка изменился алгоритм ДБО. Работают две версии - дбо1 и дбо2 - Немного разные структуры сообщений и разные адреса. И названия сертификатов на ДБО1 ранее всегда были с уникальным номером в названии, а для ДБО 2 присылают только с одним ФИО. И все это приходится подерживать и когда кончается срок старого сертификата - выдают новый сертификат без серийника и с одним ФИО в названии и он начинает дублироваться.
11 ILNIK19
 
28.02.23
09:36
(5) с ЗащищенноеСоединениеOpenSSL не до конца понятно. Например, банк прислал сертификат и ключ. Сертификат устанавливается в хранилище винды.
А каком пути к файлу pem тут идет речь?
12 Garykom
 
гуру
28.02.23
09:59
(10) Поставьте VirtualBox или Hyper-V, создайте под каждую пару банк-организация свою виртуалку и все внутри делайте
13 Garykom
 
гуру
28.02.23
10:01
(12)+ это и дополнительная защита будет, ибо не все на одном компе и внутрь виртуалки разным троянам сложней попасть
14 ILNIK19
 
28.02.23
10:30
(12) предлагаете сделать 50 виртуалок? Админы на это не пойдут
15 arsik
 
гуру
28.02.23
10:53
А нельзя переименовать сертификаты?
16 Garykom
 
гуру
28.02.23
10:57
(14) это проблемы админов
17 Garykom
 
гуру
28.02.23
10:58
(16)+ и да я не понимаю сложности сделать хоть 100 виртуалок
18 arsik
 
гуру
28.02.23
10:58
(14) Еще вариант. Сделать 1 виртуалку с 50ю пользователями. У каждого будет свой сертификат лежать
19 ILNIK19
 
28.02.23
11:09
(18) как это все обслуживать?
20 ILNIK19
 
28.02.23
11:10
(15) я написал выше, что банк присылает сертификаты, они прописываются в хранилище винды при их установке как есть.
Просим банк уже третий месяц вернуть коды в название сертификатов
21 arsik
 
гуру
28.02.23
12:43
(11) Чем плох этот метод? Там pem вроде необязателен. Openssl с любыми форматами работает.
cert.crt - экспортируешь из хранилища сертификатов винды. key.pem - тебе банк передал.
openssl pkcs12 -export –out cert.p12 -inkey key.pem -in cert.crt
22 Garykom
 
гуру
28.02.23
12:56
(19) А когда регистрировали 50 ЮЛ не думали об этом?
23 Garykom
 
гуру
28.02.23
12:57
(22)+ или хочешь сказать что это какая то уполномочка, когда один бух на обслуживание кучу ЮЛ/ИП берет?
24 ptiz
 
28.02.23
13:18
(0) А нельзя эти сертификаты распихать руками/скриптом в разные ветки реестра?
25 ILNIK19
 
28.02.23
13:30
(22) где регистрировали? О чем ты спрашиваешь? Юрлица работают более 10 лет + постоянно добавляются новые. Все работало до конца 2023г - банк выдавал сертификаты на юрлицо и в названии также был id организации.
Потом все поменялось, теперь все новые сертификаты банк выдает только на физлицо.
Мы меняем сертификаты постепенно, когда у них закачивается срок или когда переводим новое юрлицо из другого банка в втб.
На часть организаций право подписывать имеет один и тот же уполномоченный человек.
В итоге сертификаты стали дублироваться
26 ILNIK19
 
28.02.23
13:31
(24) А как это сделать? Сертификат ставится через крипто про, плюс WinHttpRequest ищет сертификат по названию и там пусть нельзя указывать путь
27 Salimbek
 
28.02.23
13:54
Сделать обработку, которая при запуске Регистрирует Сертификат из указанной папки (для ИП 0 - из папки "0", ИП 1 - из папки "1" и т.д.), потом обращается к этому самому сертификату, потом за собой удаляет этот сертификат, освобождая место для нового.
28 Гость из Мариуполя
 
гуру
28.02.23
13:57
(9) если под "наименованием" ты подразумеваешь то, что хранится в ветке HKEY\LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Users\S-1-5-23…\Keys,  (это на Windows 10)
то там хранятся "синонимы", те, под которыми ты их САМ СОХРАНЯЕШЬ в Крипто Про
тебе уже несколько раз сказали - переименуй.
в конце то концов  .. высунь руки из ж и ПОПРОБУЙ переименуй САМ, КАК ТЕБЕ УГОДНО.
Сперва сохрани исходный  куда-нибудь. Потом скопируй под другим именем (да тот же код к имени добавь). Потом исходный удали. Все. Несколько движений мышкой в Крипто Про.
В чем проблема? Ты хоть попробуй для начала. Все в Крипто Про есть - и сохранить, и скопировать, и удалить. Лень мышкой пошевелить?

Если же под наименованием ты подразумеваешь поле CN в сертификате, то тады ойц. Оно жестко задается при генерации ключа.
29 Гость из Мариуполя
 
гуру
28.02.23
14:07
(26) >> Сертификат ставится через крипто про
и закрытый ключ у тебя в формате крипто про?
и ветка реестра именно та, которую я указал?
и вообще криптопровайдер (СКЗИ) у тебя Крипто Про?

ну если так, то и пересохраняй под уникальными "синонимами".
30 Garykom
 
гуру
28.02.23
14:29
(28) Там не в этом проблема

SetClientCertificate ищет по полю Subject сертификата, на его имя пофиг
И вот у него несколько сертификатов с одинаковыми Subject

ЗЫ
Почему у WinHttpRequest в SetClientCertificate не реализован выбор сертификата по отпечатку (fingerprint, thumbprint) хороший вопрос
31 ILNIK19
 
28.02.23
14:34
(28) да я бы так сделал, если бы знал об этом до твоего поста.
В интернете нигде нет об этом инфы.
Надо пробовать
32 ILNIK19
 
28.02.23
14:34
1сники уже и сертификаты переделывают и кофе админам готовят...
33 ILNIK19
 
28.02.23
14:39
(30) поле Subject можно самому поменять через крипто про? это никак потом не повлияет на прием банком сертификата?
34 ILNIK19
 
28.02.23
14:45
Я посмотрел в Крипто Про, поле Subject - это единственное поле в свойствах сертификата, где содержится ФИО ответственного сотрудника и оно совпадает с названием сертификата
Скорее всего это должно меняться на стороне банка
35 ILNIK19
 
28.02.23
14:48
На форуме КриптоПро есть похожая ветка -

В связи с изменением формы собственности в корневом сертификате необходимо изменить значения CN и O в поле «Издатель» и «Субъект». Подскажите пожалуйста как это можно сделать?
Используем КриптоПро УЦ 1.05.1114.
КриптоПро CSP 3.6.6497
Windows Server 2008 R2 Enterprise SP1

Ответ -
Необходимо генерировать новый сертификат со всеми вытекающими последствиями...
36 Garykom
 
гуру
28.02.23
14:48
(33) нельзя

можно попробовать вынести сертификаты в файлы с разными именами
но как к ним привязать ключи это вопрос
37 ILNIK19
 
28.02.23
14:56
В старых сертификатах, выданных банком, в поле Subject присутствуют реквизиты CN, OU, O, S, C. Поле CN содержит ID организации и фамилию физлица, например, 123456789_IvanovII.
Во всех новых сертификатах поле Subject присутствует только реквизит CN и там фИО по-русски, например, Иванов Иван Иванович и всё
38 ptiz
 
28.02.23
15:19
(37) Думаю, проще всего выйдет переписать обращения, сделав их через прокладку в лице 1С.
39 arsik
 
гуру
28.02.23
15:26
Не факт, Subject = CN
Скорее всего CN используется если у сертификата не указано имя.
Попробуй указать руками. Проверь.
https://i.imgur.com/8F3nZkq.png
40 Гость из Мариуполя
 
гуру
28.02.23
16:01
(30) где ищет? в реестре? там (в реестре) в той ветке, которую я привел выше, нет поля субъект.
собственно, вот ветка, там я САМ СОХРАНЯЛ сертификат, для различия  ставил разные года.
https://1drv.ms/u/s!Au_gEyxEzVvcjkSMM51KOBK6N1Qc?e=QZgy3b

PS: ничто не мешает попробовать скопировать в крипто про один ключик под вторым именем и потренироваться. (31) - попробовал?
41 Гость из Мариуполя
 
гуру
28.02.23
16:03
ну а про CN я сразу сказал в (28)
42 oleg_km
 
28.02.23
18:05
Ключи же можно искать по серийнику или отпечатку
43 ILNIK19
 
28.02.23
18:44
(42) как это можно сделать методом SetClientCertificate?
44 Garykom
 
гуру
28.02.23
19:34
SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Выбирать), Новый CертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(АдресСервера, 443, Логин, Пасс, , 5, SSL);

И не ипи уже мозги

И да если ты не можешь код 1С переписать с WinHttpRequest на HTTPСоединение то наймите программиста 1С
45 ILNIK19
 
01.03.23
09:04
(44) это не подходит
46 Garykom
 
гуру
01.03.23
09:39
(45) ничего не понял но интересно
47 big
 
01.03.23
10:33
(30) Метод SetClientCertificate ищет сертификат по указанному пути хранилища сертификатов или же по-умолчанию в "My". Может есть возможность сделать множество локальный хранилищ (для каждого юрлица, например) и уже при поиске подставлять нужный путь - My01, My02 и т.д.
48 arsik
 
гуру
01.03.23
10:36
(47) не, это ж виндовые хранилища ключей.
49 Garykom
 
гуру
01.03.23
11:23
(47) ага подпапки создать ))
Независимо от того, куда вы едете — это в гору и против ветра!