Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Заявка стала кракозябром нет, это UTF-8 Цитата:подписывается с помощью CAPICOM каким образом? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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;
В коде вроде бы проблем нет.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.11.2012(UTC) Сообщений: 11
|
Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
alem написал:Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает. Web-сервер IIS? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.11.2012(UTC) Сообщений: 11
|
Андрей * написал:alem написал:Андрей, виноват, ввел в заблуждение. Но решения проблемы это все равно не дает. Web-сервер IIS? да, Microsoft-IIS/6.0
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.11.2012(UTC) Сообщений: 11
|
Андрей * написал:Цитата: я передаю запрос с помощью MSXML2.XMLHttp но он упорно не желает отправлять данные в кодировке 1251. хотя option(2) = 1251 а MXDigitalSignature.Sign результат - возвращает разве в Windows-1251? Да. И более того все параметры записываются в файл с кодировкой 1251 после чего формируется тело POST. Соответственно, при отправке, весь текст в кодировке 1251. Отредактировано пользователем 15 ноября 2012 г. 19:44:38(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)
| Причина: Не указана |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close