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

Уведомление

Icon
Error

8 Страницы<12345>»
Опции
К последнему сообщению К первому непрочитанному
Offline slavw  
#21 Оставлено : 27 февраля 2015 г. 7:45:33(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
для <SignedInfo> расчитывается уже не хеш! а ПОДПИСЬ....
Offline smev  
#22 Оставлено : 27 февраля 2015 г. 7:50:17(UTC)
smev

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

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

да вы правы я не так написал. А по сути то какие варианты как это сделать?
Offline slavw  
#23 Оставлено : 27 февраля 2015 г. 7:56:00(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
посмотрите выше, я в этой теме полностью приводил исходный код своей процедуры.. сообщения #10 и #11
если там что то непонятное, спрашивайте...
Offline slavw  
#24 Оставлено : 2 марта 2015 г. 12:07:03(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
Модуль для канонизации XML (Delphi XE7) во вложении.

Пример вызова:

Код:

procedure TForm3.Button12Click(Sender: TObject);
var NameSpaces:TStrings;
begin
  NameSpaces:=TStringList.Create;
  try
    NameSpaces.Values['mes1']:='http://roskazna.ru/gisgmp/xsd/116/MessageData';
    TFile.WriteAllText('C:\1ac.xml',
      XMLCanonicalize(TFile.ReadAllText('C:\1a.xml',TEncoding.UTF8),NameSpaces),TEncoding.UTF8);
  finally
    NameSpaces.Free;
  end;
end;


или (в реально работающем коде):

Код:

var
  SignedInfo: string;
  DataStream: TStream;
  ...
  
begin
DataStream:=TStringStream.Create(XMLCanonicalize(SignedInfo,'ds=http://www.w3.org/2000/09/xmldsig#'),TEncoding.UTF8);

Отредактировано пользователем 2 марта 2015 г. 12:31:50(UTC)  | Причина: Не указана

Вложение(я):
uXMLHelper.zip (2kb) загружен 177 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
thanks 2 пользователей поблагодарили slavw за этот пост.
MCR оставлено 02.03.2015(UTC), boblan оставлено 23.08.2018(UTC)
Offline smev  
#25 Оставлено : 4 марта 2015 г. 10:51:36(UTC)
smev

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

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

Привет с канонизамцией и подписанием все получилось удачно :)
Я смогу потом написать как я это сделал.

Но у меня возникла новая проблемка. Я не могу отправить запрос на сервис СМЭВ.
Я пишу подобный код как сдесь http://www.cryptopro.ru/...sts&t=8136#post52570

И получаю ту самую ошибку 500 !
Ничего не пойму????
Чего не хватает , хедеров в WebRequest или чего еще?

Подскажи как ты реализуеш отправку и получение запросов в своей реализации?
Пришли пример кода?
Offline slavw  
#26 Оставлено : 4 марта 2015 г. 11:25:53(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
с этим у меня проблем не возникало:
Код:

function SoapSendMessage(SoapRequest: string): IXMLDocument;
var
  Request: TStringStream;
  Response: TMemoryStream;
begin
  Response:=TMemoryStream.Create;
  Request:=TStringStream.Create(SoapRequest,TEncoding.UTF8);
  with THTTPReqResp.Create(nil) do
  try
    URL:=ServiceURL;
    Execute(Request,Response);
    Result:=NewXMLDocument;
    Result.LoadFromStream(Response);
  finally
    Free;
    Request.Free;
    Response.Free;
  end;
end;
Offline smev  
#27 Оставлено : 4 марта 2015 г. 11:42:36(UTC)
smev

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

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

так просто?
а на сишарпе есть примеры ?

я посмотрел примеры по твоей компоненте:
народ выставляет хедеры в запросе....

1. Content-Type: text/xml; charset=utf-8
2. HTTPReqResp1.SoapAction := '"http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames"';
3. HTTPReqResp1.URL := 'https://webmail.mailserver.nl/ews/exchange.asmx';

подскажи какой ты выставялеш SoapAction в рамках СМЭВ ?? как его правильно написать?
какие хедеры ты выставляеш перед запросом?

Отредактировано пользователем 4 марта 2015 г. 12:27:03(UTC)  | Причина: Не указана

Offline slavw  
#28 Оставлено : 4 марта 2015 г. 12:58:31(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
все что я делаю с компонентом THTTPReqResp я показал, больше ничего у него не указываю... все по-умолчанию...
только URL:=ServiceURL;
Offline ODG  
#29 Оставлено : 16 октября 2015 г. 11:06:33(UTC)
ODG

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

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

Автор: slavw Перейти к цитате
Я не утвержаю, что в Delphi нет средств для каноникализации XML... я констатирую этот факт. Если у кого то есть сомнения по этому поводу, что ж...
Можно написать и самому, но для этого надо знать как оно должно работать... именно с этой целью я и выложил программу c14n.exe... если вы не сможете вручную преобразовать XML к каноническому виду, то тем более не сможете "научить" этому свою процедуру...
А исходники конечно будут, если будет интерес к этому вопросу...
но не будет толка от процедур для получения хеша и подписи пока не будет возможности передать им "нужный" XML...


После прочтения утверждения Slavw специально провел тестирование основных парсеров для среды Delphi XE4-XE5 на основе примеров приведенных на сайте http://www.w3.org/TR/xml-c14n11/:
- MSXML2_TLB - методов каноникализации для среды нет;
- Встроенные средства Delphi (компонент TXMLDocument)- методов каноникализации нет;
- Библиотека NativeXML - средства каноникализации к виду с14n есть, но тестирование по примерам не проходит (подробности опускаю, можете сами протестировать);
- libxml2 - средства каноникализации к виду с14n есть, но тестирование по примерам не проходит.
- uXMLHelper от slavw канонизирует XML, но тестирование по примерам, указанным в рекомендациях консорциума W3C Canonical c14n показало также многие несоответствия.

В результате пришел к выводу - 100% согласен с утверждением "в Delphi нет средств для каноникализации XML... ". По крайней мере в соответствии с рекомендациями консорциума.

Полное соответствие дает каноникализация в программе c14n.exe (текст ), причем если в C# используются версия FrameWork 3.5 и ниже, то полного соответствия также нет (если в XML используются ссылки на несуществующие файлы). Так, что необходима версия FrameWork 4.0 и выше.

В Delphi можно использовать средства, применяемые для каноникализации XML к виду c14n в C#.
Для этого с помощью MS VS создать DLL с COM интерфейсом. В DLL используется единственная функция для каноникализации XML, например:

private XmlDsigExcC14NTransform xmlTransform;

public string[] TransformStringToC14n(string Input)
{
xmlTransform = new XmlDsigExcC14NTransform(false);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;

xmlDocument.LoadXml(Input.Replace("\r\n", '\n'.ToString()));
xmlTransform.LoadInput((object)xmlDocument);
return Encoding.UTF8.GetString(((System.IO.MemoryStream)xmlTransform.GetOutput()).ToArray()).Split('\n');
}
У нас DLL после компиляции в MS VS 2015 имеет размер 6144 байт )))

Далее необходимо зарегистрировать COM объект в системе, где установлена Delphi среда, да и вообще где будет проводиться каноникализация с использованием этой DLL.
Делается это просто: утилита из состава MS FrameWork Regasm.exe.
Выполняется так:
- запустить командную строку в режиме Администратор;
- перейти в директорию, содержащую DLL Com объекта.
- выполнить команду: c:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe canonicalization_c14n_4.5.dll /tlb
Данная команда выполняет регистрацию COM объекта в системе Windows, а также создает библиотеку описания типов canonicalization_c14n_4.5.tlb, котарая необходима для генерации библиотеки типов в Delphi.
- В среде Delphi необходимо сгенерировать библиотеку типов canonicalization_c14n_4.5_tlb.pas
Для этого необходимо выполнить команду меню Component - Import Component - Import a Type Library.
Выбрать из списка необходимую библиотеку типов (в нашем случае canonicalization_c14n_4.5) и импортировать ее. В результате будет создан canonicalization_c14n_4.5_tlb.pas, который помещается в каталог среды Imports.
- В модуле рабочего проекта подключить canonicalization_c14n_4.5_tlb.pas в Uses и воспользоваться функцией каноникализации в Delphi:

procedure TForm3.Button2Click(Sender: TObject);
var ;
Canonicalization_c14n:TransformToC14n;
xml_C14n:PSafeArray;
begin
Canonicalization_c14n:= CoTransformToC14n.Create;
xml_C14n:=Canonicalization_c14n.TransformStringToC14n(XMLDoc.xml);
end;

- Тип PSafeArray переводится в String просто:

...
var index, Count, Max:integer;
str:string;
getResult : HRESULT;


Count:=SafeArrayGetDim(xml_C14n);
SafeArrayGetUBound(xml_C14n, Count, Max);
for index:=0 to Max do begin
getResult:=SafeArrayGetElement(xml_C14n, Index, str);
case getResult of
S_OK : ShowMessage('Success.');
DISP_E_BADINDEX : ShowMessage('The specified index was invalid.');
E_INVALIDARG : ShowMessage('One of the arguments is invalid.');
E_OUTOFMEMORY : ShowMessage('Memory could not be allocated for the element.');
end;
Memo2.Lines.Add(str); //Вывод каждой строки в Memo компонент.
end;


Вот собственно и все. Каноникализация будет проходить в полном соответствии с рекомендациями w3c.



Offline slavw  
#30 Оставлено : 16 октября 2015 г. 11:26:00(UTC)
slavw

Статус: Активный участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
как это ни парадоксально звучит, но нам не нужна каноникализация в полном соответствии с рекомендациями w3c.
нам нужна именно та каноникализация, которую использует у себя СМЭВ... зависит от того, какой библиотекой пользуются там...
поэтому... на данный момент uXMLHelper работает так как надо...
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
8 Страницы<12345>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.