Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ser_ale  
#1 Оставлено : 28 ноября 2024 г. 13:01:06(UTC)
ser_ale

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.11.2024(UTC)
Сообщений: 4
Российская Федерация

Добрый день,

подскажите, пожалуйста, куда копать. На форуме все темы связанные с НКТ посмотрел, частично помогли, но дальше с места дело не двигается.
У Национального каталога есть метод:
Метод «feed-product-sign-pkcs» предназначен для подписи карточки товара или нескольких карточек с помощью сертификата в формате PKCS#7. Отличается от метода feed-product-sign тем, что из содержимого карточки товара в формате XML исключается подпись, которая при использовании текущего метода передается отдельным параметром в запросе (подписание карточки производится с помощью открепленной подписи). Данные кодируются в base64.
параметр signature в запросе - Открепленная подпись, закодированная в base64 и соответствующая типу CAdES в формате pkcs7.

В 1с формирую подпись таким образом:
Код:
&НаСервере
Функция ПодписатьТекстНаСервере(ТекстДляПодписи, sThumbprint)

	oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
	oSigner.Certificate = ПолучитьСертификатПоОтпечаткуНаСервере(sThumbprint);
	oSigner.Options=1;//включать цепочку

	ТекстДляПодписи = СокрЛП(ТекстДляПодписи);
	oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
	oSignedData.Content = СокрЛП(ТекстДляПодписи);
	CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
	bDetached = Истина;
	EncodingType = 0;
	sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.

	Возврат sSignedMessage; // Подпись в формате Base64

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


в ответ на запрос, НКТ присылает сообщение - Ваш сертификат не прошел проверку, попробуйте другой сертификат.
Если сгенерировать подпись на сайте https://www.cryptopro.ru...ge/cades_bes_sample.html - все нормально отправляется.
Спасибо.

Отредактировано пользователем 28 ноября 2024 г. 13:01:55(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 28 ноября 2024 г. 15:04:50(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Здравствуйте.

Так вопрос всё таки в типе подписи или в сертификате?

В коде - отсоединенная,
на сайте - присоединенная формируется.


Если вопрос с сертификатом - то почему с сайта принимается? Или там другой выбирался?
Техническую поддержку оказываем тут
Наша база знаний
Offline ser_ale  
#3 Оставлено : 28 ноября 2024 г. 17:29:52(UTC)
ser_ale

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.11.2024(UTC)
Сообщений: 4
Российская Федерация

Спасибо за ответ!
Я так понял, что НКТ всегда возвращает такую ошибку - сертификат не правильный используйте другой.
Что на сайте, что в 1с в отладчике используется один и тот же сертификат.
Пробовал сделать bDetached как истина так и ложь. В результате этих манипуляций у меня получилось 3 разных файла.
resp_docs_doc_zapros_feed-product-sign-pkcs_detached_true.txt (9kb) загружен 2 раз(а). - bDetached =Истина
resp_docs_doc_zapros_feed-product-sign-pkcs_detached_false.txt (14kb) загружен 2 раз(а). - bDetached =Ложь
from_site.txt (8kb) загружен 2 раз(а). - подпись с сайта
На форуме где-то видел Вы писали что на сайте в подпись включается цепочка сертификатов, возможно в 1с при такой подписи она не включается?
Offline Андрей *  
#4 Оставлено : 28 ноября 2024 г. 18:01:50(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Да, всё верно, пример с сайта вкладывает только сертификат подписанта,
в примерах из 1с - вложена вся цепочка (МЦ, ФНС, ООО),

необходимо явно указывать перед подписанием.


+ а что с кодировками?

в from_site utf8
resp_docs_doc_zapros_feed-product-sign-pkcs_detached_false - utf16 LE





Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 28 ноября 2024 г. 18:03:20(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Автор: ser_ale Перейти к цитате
Спасибо за ответ!
Я так понял, что НКТ всегда возвращает такую ошибку - сертификат не правильный используйте другой.


Пишите им, чтобы исправили ошибку в своём коде на сервере.

Читать нужно сертификат подписанта, а не первый попавшийся (МЦ или ФНС) из CMS.



Snimok ehkrana ot 2024-11-28 18-53-19.png (7kb) загружен 3 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#6 Оставлено : 28 ноября 2024 г. 18:12:33(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
oSigner.Options(2)

https://learn.microsoft....rtificate-include-option

CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2
Saves only the end entity certificate.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#7 Оставлено : 28 ноября 2024 г. 18:13:30(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Цитата:
oSigner.Options=1;//включать цепочку -

вот это ошибка, выставить явно 2
Техническую поддержку оказываем тут
Наша база знаний
Offline ser_ale  
#8 Оставлено : 28 ноября 2024 г. 19:46:32(UTC)
ser_ale

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.11.2024(UTC)
Сообщений: 4
Российская Федерация

Спасибо за ответ. Посмотрел содержимое файла с сайта, там читаемый XML, а дальше подписи в таком же порядке, что и в 1с, если я все правильно понял, разница в кодировке. Сохранил специально в utf8, подписал - все равно кодировка utf16. Не подскажете как в подписи прописать другую кодировку?
Попробовал сделать передачу в подпись base64, думал она там развернет и сделает как надо:
Код:
&НаСервере
Функция ПодписатьТекстНаСервере_на_форумотправил(ТекстДляПодписи, sThumbprint)

	oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
	oSigner.Certificate = ПолучитьСертификатПоОтпечаткуНаСервере(sThumbprint);
	oSigner.Options=2;

	ТекстДляПодписи = СокрЛП(ТекстДляПодписи);
	oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
	
	ТекстДляПодписи=Encode(ТекстДляПодписи);
	
	oSignedData.ContentEncoding = 1;
	oSignedData.Content = СокрЛП(ТекстДляПодписи);
	
	CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
	bDetached = ложь;

	EncodingType = 0;
	sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.

	Возврат sSignedMessage; // Подпись в формате Base64


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


НК прислали ответ "String could not be parsed as XML", соответственно подпись: resp_docs_doc_zapros_feed-product-sign-pkcs_base64_ContentEncoding.txt (9kb) загружен 2 раз(а).
Offline Андрей *  
#9 Оставлено : 28 ноября 2024 г. 21:30:55(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,899
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
в oSignedData.Content должно быть base64(xml utf8),
но в приложенном файле - извлекается base64, декодирование показывает xml utf8.

Как будто есть двойное кодирование в base64 перед подачей в oSignedData.Content.
Техническую поддержку оказываем тут
Наша база знаний
Offline ser_ale  
#10 Оставлено : 28 ноября 2024 г. 22:07:00(UTC)
ser_ale

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.11.2024(UTC)
Сообщений: 4
Российская Федерация

Да, точно, два раза закодировал.
Андрей, большое спасибо за помощь!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.