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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline alem  
#1 Оставлено : 15 ноября 2012 г. 17:12:13(UTC)
alem

Статус: Участник

Группы: Участники
Зарегистрирован: 15.11.2012(UTC)
Сообщений: 11

Добрый день, коллеги.

Проблема в общем то с кодировкой, но мне не понятно как и куда копать. Собственно проблема в следующем:

берется таблица со страницы, подписывается с помощью CAPICOM и передается в теле POST на сайт. выглядит это примерно так:

Код:
-----------------------------7dc3d4268027c
Content-Disposition: form-data; name="ctl01$hdnDemandXML"

<html><head><title>Заявка</title><META http-equiv="C..............

-----------------------------7dc3d4268027c
Content-Disposition: form-data; name="ctl01$hdnDemandSidned"

<ds:Signature xmlns:ds="http://www.w3.org..........................
    guydE****************************************************
    EYZ***********==
  </ds:SignatureValue><ds:Object Id="TS__Zayavka" MimeType="text/plain"><html><head><title>Заявка</title><META http-equiv="C.............


Все это передается в кодировке win-1251 с сайта заголовок приходит charset=windows-1251

Но в возвращаемом контенте значение переменной ctl01$hdnDemandSidned уже следующее:
Код:
<ds:Signature xmlns:ds="http://www.w3.org
    guydE****************************************************
    EYZ***********==
  </ds:SignatureValue><ds:Object Id="TS__Zayavka" MimeType="text/plain"><html><head><title>Заявка</title><META http-equiv="C.............

Заявка стала кракозябром и соответственно на сервере это значение не принимается.

Кто может что либо подсказать?

Отредактировано пользователем 15 ноября 2012 г. 17:12:57(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#2 Оставлено : 15 ноября 2012 г. 17:34:29(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Заявка стала кракозябром

нет, это UTF-8
Цитата:
подписывается с помощью CAPICOM

каким образом?
Техническую поддержку оказываем тут
Наша база знаний
Offline alem  
#3 Оставлено : 15 ноября 2012 г. 19:18:07(UTC)
alem

Статус: Участник

Группы: Участники
Зарегистрирован: 15.11.2012(UTC)
Сообщений: 11

Да, действительно это utf. В принципе сам уже почти разобрался, проблема в том, что я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251. Подписание проходит с помощью следующего кода:
Код:
	STORE_LOCATION = 2;
	STORE_NAME = "My";
	dsigObjectId = "TS__Zayavka";
	xmldoc = ПолучитьCOMОбъект("","MSXML2.DOMDocument.5.0");
	xmldoce = ПолучитьCOMОбъект("","MSXML2.DOMDocument.5.0");
	xmldsig = ПолучитьCOMОбъект("","Msxml2.MXDigitalSignature.5.0");
	oStore = ПолучитьCOMОбъект("","CAPICOM.Store.2");
	oCerts = ПолучитьCOMОбъект("","CAPICOM.Certificate");
	oSigner = ПолучитьCOMОбъект("","CAPICOM.Signer");
	xmldoc.loadXML(ХТМ);
	xmldoce.async = false;
	xmldoce.validateOnParse = false;
	xmldoce.preserveWhiteSpace = false;
	xmldoce.resolveExternals = false;
	xmldoce.loadXML("<ds:Signature xmlns:ds='http://www.w3.org...........");
	elmToWrap = xmldoc.documentElement.cloneNode(true);
	elmWhereTo = xmldoce.selectSingleNode("//*[@Id='" + dsigObjectId +"']");
	elmWhereTo.appendChild(elmToWrap);
	xmldoc = xmldoce;
	xmldoce = null;
	oStore.Open(STORE_LOCATION, STORE_NAME, 128);
	oCerts = oStore.Certificates;
	Если oCerts.Count = 0 Тогда
	Сообщить("В личном хранилище нет сертификатов");
	КонецЕсли;
	oSelectedCerts = oCerts.Select();
	Для каждого серт ИЗ oSelectedCerts Цикл
	oSignerCert = серт;
	КонецЦикла;
	xmldsig.signature = xmldoc.selectSingleNode("//*[count(ancestor::*)=0]");
	pKey = xmldsig.createKeyFromCSP(oSignerCert.PrivateKey.ProviderType, oSignerCert.PrivateKey.ProviderName, oSignerCert.PrivateKey.ContainerName, 0);
	pKeyOut = xmldsig.sign(pKey, 2);	
	ДанныеПодп = xmldoc.xml;	


В коде вроде бы проблем нет.
Offline Андрей Писарев  
#4 Оставлено : 15 ноября 2012 г. 19:21:29(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
alem написал:
берется таблица со страницы, подписывается с помощью CAPICOM



alem написал:
Да, действительно это utf. В принципе сам уже почти разобрался, проблема в том, что я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251. Подписание проходит с помощью следующего кода:
alem написал:

xmldsig = ПолучитьCOMОбъект("","Msxml2.MXDigitalSignature.5.0");

xmldsig.signature = xmldoc.selectSingleNode("//*[count(ancestor::*)=0]");
pKey = xmldsig.createKeyFromCSP(oSignerCert.PrivateKey.ProviderType, oSignerCert.PrivateKey.ProviderName, oSignerCert.PrivateKey.ContainerName, 0);
pKeyOut = xmldsig.sign(pKey, 2);
ДанныеПодп = xmldoc.xml;


Отредактировано пользователем 15 ноября 2012 г. 19:27:25(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline alem  
#5 Оставлено : 15 ноября 2012 г. 19:27:57(UTC)
alem

Статус: Участник

Группы: Участники
Зарегистрирован: 15.11.2012(UTC)
Сообщений: 11

Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает.
Offline Андрей Писарев  
#6 Оставлено : 15 ноября 2012 г. 19:33:16(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
alem написал:
Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает.


Web-сервер IIS?
Техническую поддержку оказываем тут
Наша база знаний
Offline alem  
#7 Оставлено : 15 ноября 2012 г. 19:34:03(UTC)
alem

Статус: Участник

Группы: Участники
Зарегистрирован: 15.11.2012(UTC)
Сообщений: 11

Андрей * написал:
alem написал:
Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает.


Web-сервер IIS?


да, Microsoft-IIS/6.0
Offline Андрей Писарев  
#8 Оставлено : 15 ноября 2012 г. 19:37:56(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Цитата:
я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251


а MXDigitalSignature.Sign результат - возвращает разве в Windows-1251?


Отредактировано пользователем 15 ноября 2012 г. 19:38:31(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline alem  
#9 Оставлено : 15 ноября 2012 г. 19:43:49(UTC)
alem

Статус: Участник

Группы: Участники
Зарегистрирован: 15.11.2012(UTC)
Сообщений: 11

Андрей * написал:
Цитата:
я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251


а MXDigitalSignature.Sign результат - возвращает разве в Windows-1251?


Да. И более того все параметры записываются в файл с кодировкой 1251 после чего формируется тело POST. Соответственно, при отправке, весь текст в кодировке 1251.

Отредактировано пользователем 15 ноября 2012 г. 19:44:38(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#10 Оставлено : 15 ноября 2012 г. 19:46:24(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
alem написал:
Андрей * написал:
Цитата:
я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251


а MXDigitalSignature.Sign результат - возвращает разве в Windows-1251?


Да. И более того все параметры записываются в файл с кодировкой 1251 после чего формируется тело POST. Соответственно, при отправке, весь текст в кодировке 1251.


А можно взглянуть на подписанный файл? (Можно здесь или в PM ссылку)



Для теста создай страничку (asp\aspx) с отправкой файла (подписанного, тот, что в POST- идет) и попробуй загрузить на сервер.
Посмотри, будет ли корректно?


Отредактировано пользователем 15 ноября 2012 г. 19:48:05(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.