<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>goodguy о разработке &#187; безопасность</title>
	<atom:link href="http://dev.good-guy.me/archives/tag/bezopasnost/feed" rel="self" type="application/rss+xml" />
	<link>http://dev.good-guy.me</link>
	<description>python, zope, php, sqlite, postgresql, mysql и прочее с чем сталкиваюсь</description>
	<lastBuildDate>Thu, 08 Jul 2010 09:17:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PHP и SOAP Message Security</title>
		<link>http://dev.good-guy.me/archives/356</link>
		<comments>http://dev.good-guy.me/archives/356#comments</comments>
		<pubDate>Wed, 29 Apr 2009 15:44:29 +0000</pubDate>
		<dc:creator>goodguy</dc:creator>
				<category><![CDATA[Языки]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://dev.goodguy.spb.ru/?p=356</guid>
		<description><![CDATA[Очередной случай из жизни натолкнул меня на мысль расписать, как из PHP создать подписанный по стандарту SOAP Message Security SOAP-запрос по SSL-соединению. Насколько я понимаю, стандарт этот не единственный, но используется достаточно широко и базируется на различных XML-стандартах W3C. Сама суть механизма подписи хорошо описана в этой статье, из которой и я почерпнул для себя [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Очередной случай из жизни натолкнул меня на мысль расписать, как из PHP создать подписанный по стандарту <a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf">SOAP Message Security</a> SOAP-запрос по SSL-соединению. Насколько я понимаю, стандарт этот не единственный, но используется достаточно широко и базируется на различных XML-стандартах W3C.
<p style="text-align: justify">Сама суть механизма подписи хорошо описана в <a href="http://xmlhack.ru/texts/03/wssecurity/wssecurity.html">этой статье</a>, из которой и я почерпнул для себя несколько полезных моментов, на которых возник ступор поначалу. Но предлагаемый мной вариант имеет одно важное дополнение: он добавляет в SOAP-сообщение ещё и информацию о сертификате, с помощью которого была сделана подпись. Кстати, меня удивила логика одной системы, для которой это делалось (кстати, написанной на Microsoft&#8217;овских компонентах): помимо сертификата в SSL-соединении они ещё проверяли сертификат и в самом запросе, хотя могли бы и воспользоваться данными HTTPS и тем самым получить ещё дополнительную проверку того, что соединение открыто тем самым агентом, который подписывал запрос.</p>
<p style="text-align: justify">Основным моментом в подписи является то, что собираются хэши (дайджесты) узлов с данными, которые будут подписаны (при этом узлы приводятся в <a href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/">канонический вид</a> с помощью утилиты <tt>xmllint</tt> из комплекта <tt>libxml2</tt>). После чего собранные внутри одной «обёртки» дайджесты подписываются ключом сертификата, тем самым гарантируя, что если подпись верна, то данные в этих узлах не были изменены во время передачи запроса.</p>
<p style="text-align: justify">Класс так-же переписывает механизм HTTP-запроса к удалённому серверу, т.к. даже с помощью <tt>stream_context</tt> PHP не позволяет использовать совместно с SOAP сертификаты в формате PKCS12. В итоге используется <tt>HTTPRequest</tt>, результат которого уже транслируется далее в обработку.</p>
<ul>
<li> Собственно сам класс: <a href='http://dev.goodguy.spb.ru/wp-content/uploads/2009/04/signedsoapclient.zip'>SignedSoapClient.zip</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dev.good-guy.me/archives/356/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
