Denis Gladkikh

outcoldman

My personal blog about software development

  • 05 Sep 2011
  • Certificate, Сертификаты, CryptoAPI, Silverlight 5, CAPICOM

Я достаточно часто слышал вопрос о том, можно ли в Silverlight работать с сертификатами. Основную задачу, которую хотели решить при помощи этого – это подпись данных или документов на стороне клиента. Я обычно с такими задачами сталкивался в проектах, которые отчасти или полностью были государственными. Требуется это в них потому, что не хотят в России доверять людям, а так же не верят, что любую защиту можно взломать (хотя бы методом паяльника или утюга). Я когда-то давно писал статью о "Использование сертификатов: Подпись данных на стороне клиента." (это была, кстати, первая моя статья, вообще), тогда это все делалось в виде CAPICOM + Javascript. Собственно, вопрос: с выходом Silverlight 5 что-нибудь изменится?

В Silverlight 5 теперь есть возможность работать с COM объектами не только из Out-Of-Browser режима, но и просто из браузера, для этого нужно установить галочку для проекта “Require elevated trust when running in-browser” (эта галочка сразу же на первой вкладке настройки Silverlight проекта). Например, теперь для сайтов в Intranet зоне все будет работать по умолчанию, вы можете писать Intranet Silverlight приложения, которые, например, вызывают Excel для создания отчетов. Дает ли нам это возможность использовать CAPICOM в браузере? Да, это так. Но есть проблема позначительнее, CAPICOM умер. Последние поддерживаемые операционные системы – это Windows Vista и Windows Server 2008. Но, в принципе, Windows XP до сих пор жив, может вам и “повезет” при решении такой задачи для enterprise, и у всех клиентов будут Windows версии: XP, или Vista, или может быть даже что-то младше. Если так, то

dynamic store = AutomationFactory.CreateObject("CAPICOM.Store");

И вперед изучать CAPICOM. Но подумайте не один раз, точно ли это лучший вариант для вас.

Еще, как вариант, можно посмотреть на PInvoke в Silverlight 5. Если приложению поставлена опция “Require elevated trust when running in-browser” (опять же запустить его в Intranet/Trusted Sites), то можно использовать PInvoke прямо в браузере. Я попробовал – работает. Честно, не читал, будет ли так в окончательной версии. Но тут есть другая проблема, работать с CryptoAPI напрямую – это не очень-то приятное занятие (и опять, я не могу гарантировать, что работать точно будет, нужно пробовать).

В общем-то, все остается по старому – нужно писать свой ActiveX.

Have a question? Want to follow up? Send a comment? Or just ask for help or consultation? Send me an email at public[at]denis[dot]gladkikh[one more dot]email.