Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,899   Сказал «Спасибо»: 594 раз Поблагодарили: 2327 раз в 1825 постах
|
Здравствуйте.
Так вопрос всё таки в типе подписи или в сертификате?
В коде - отсоединенная, на сайте - присоединенная формируется.
Если вопрос с сертификатом - то почему с сайта принимается? Или там другой выбирался? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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с при такой подписи она не включается?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,899   Сказал «Спасибо»: 594 раз Поблагодарили: 2327 раз в 1825 постах
|
Автор: ser_ale  Спасибо за ответ! Я так понял, что НКТ всегда возвращает такую ошибку - сертификат не правильный используйте другой. Пишите им, чтобы исправили ошибку в своём коде на сервере. Читать нужно сертификат подписанта, а не первый попавшийся (МЦ или ФНС) из CMS.  Snimok ehkrana ot 2024-11-28 18-53-19.png (7kb) загружен 3 раз(а). |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,899   Сказал «Спасибо»: 594 раз Поблагодарили: 2327 раз в 1825 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,899   Сказал «Спасибо»: 594 раз Поблагодарили: 2327 раз в 1825 постах
|
Цитата:oSigner.Options=1;//включать цепочку - вот это ошибка, выставить явно 2 |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,899   Сказал «Спасибо»: 594 раз Поблагодарили: 2327 раз в 1825 постах
|
в oSignedData.Content должно быть base64(xml utf8), но в приложенном файле - извлекается base64, декодирование показывает xml utf8.
Как будто есть двойное кодирование в base64 перед подачей в oSignedData.Content.
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.11.2024(UTC) Сообщений: 4 
|
Да, точно, два раза закодировал. Андрей, большое спасибо за помощь!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close