04.10.2006 21:32:35Подпись и шифрование в InfoPath 2003 + CSP 3.0 + CAPICOM Ответов: 3
Дмитрий
Доброго времени суток.
Заранее прошу прощения, может не в том месте задаю свои вопросы, но к кому еще можно обратиться я не знаю...
Ситуация такова:
Имеется CSP 3.0 (Trial) + форма в InfoPath 2003, XML с которой должен подписываться и отсылаться на сервер. Вот собственно код посылки:

function XDocument::OnSubmitRequest(eventObj)
{
var strUrl = "http://localhost/";

var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
var CAPICOM_CURRENT_USER_STORE = 1;
var CAPICOM_STORE_OPEN_READ_ONLY = 0;
var CAPICOM_INFO_SUBJECT_SIMPLE_NAME = 0;
var CAPICOM_INFO_ISSUER_SIMPLE_NAME = 1;
var CAPICOM_INFO_SUBJECT_EMAIL_NAME = 2;
var CAPICOM_INFO_ISSUER_EMAIL_NAME = 3;
var CAPICOM_ENCODE_BASE64 = 0;

try
{
var objXmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(ex)
{
XDocument.UI.Alert("Could not create MSXML2.XMLHTTP object.\r\n"
+ ex.number + " - " + ex.description);
return;
}

var formXML = XDocument.DOM.xml;
var signedXML;

var MyStore = new ActiveXObject("CAPICOM.Store");
MyStore.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY);
var Certificates = MyStore.Certificates.Select("Спискок сертификатов", "Выберите сертификат для подписи документа:");
var SigData = new ActiveXObject("CAPICOM.SignedData");
var Signer = new ActiveXObject("CAPICOM.Signer");
Signer.Certificate = Certificates.Item(1);
SigData.Content = formXML;
signedXML = SigData.Sign(Signer, false, CAPICOM_ENCODE_BASE64);

//передаем
objXmlHttp.open("POST", strUrl, false);
try
{
objXmlHttp.send(signedXML);
}
catch(ex)
{
XDocument.UI.Alert("Could not post (ASP) document to " +
strUrl + "\r\n" + ex.number + " - " + ex.description);
return;
}

eventObj.ReturnStatus = true;
}

При попытке отправить InfoPath сообщает об ошибке:

Произошла следующая ошибка:

No such interface supported

Файл:script.js
Строка:72


No such interface supported

Строка 72: ЬyStore.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY);
А я тут посмотрел, люди говорят что InfoPath 2003 поддерживается.

1. Подскажите, плиз, в чем может быть проблема.
2. При получении подписи на сервере, для ее проверки нужен исходный текст... Т.е. плюс ко всему, к подписи нужно будет присоединить исходный XML?
3. Посоветуйте какое-нить подробное руководство по CAPICOM (со всеми ф-циями и константами и, если можно, с примерами), ибо я только начинаю знакомиться с данной технологией.
 
Ответы:
05.10.2006 9:19:52Kirill Sobolev
Поддержка CSP 3.0 тут непричем, до CSP вообще дело не доходит. Если Вы подписываете xml мб Вам лучше воспользоваться xmldsig? Документация по CAPICOM и xmldsig есть в MSDN (msdn.microsoft.com).
05.10.2006 17:14:37Дмитрий
Понятно, значит это капризы InfoPath.
Тогда еще вопрос. Возможно ли каким-либо образом организовать ассиметричное шифрование с использованием CAPICOM и вашего криптопровайдера? Если да, то где можно найти информацию/литературу по этой теме.
06.10.2006 17:54:36Дмитрий
Доброго времени суток!
Господа, может какой-нибудь добрый человек не сочтет за труд запостить кусок кода зашифровывающего/расшифровывающего на ассиметричном алгоритме с помощью CAPICOM? Буду очень признателен! Или на почту sobakaev@ivelum.com.