Чётко по графику!
Как и запланировано, именно сегодня выпущена версия с поддержкой ЭЦП. Горжусь!
Как и запланировано, именно сегодня выпущена версия с поддержкой ЭЦП. Горжусь!
Отправил
Das Ich
в
9:40 PM
0
раз прокомментировано
Метки: работа
Может вызываться недействительным сертификатом пользователя, либо таким сертификатом, который подписан ключом, сертификат которого отсутствует в Trusted Root.
Разумеется, в том случае, если клиент WCF аутентифицируется при помощи сертификатов
Отправил
Das Ich
в
2:53 PM
0
раз прокомментировано
Метки: работа
Потратил несколько дней на обзор ситуации с подписанием документов в браузере. Что удалось выяснить...
Простое подписание документа при помощи DSIG в Windows (IE) невозможно. Для этого необходимо либо использовать нерекомендованную версию MSXML (5.0), либо самостоятельно заниматься такими малоприятными вещами, как покусочное формирование XML Digital Signature. Бесплатного COM-компонента или библиотеки для выполнения этой работы не существует. Это с одной стороны. С другой, есть .NET и XSign, но требования к текущей задачи не позволяют рассчитывать на наличие у пользователя хотя бы .NET 1.1, не говоря уже об XSign.
Хоть и очень хотелось, но от XMLDSIG пришлось отказаться. Вместо этого принято решение использовать цифровые подписи PKCS #7. На клиенте (в Internet Explorer) документ подписывается и в составе скрытого поля отправляется на сервер, там подпись проверяется и если всё в порядке, то и ... всё.
Если кратко. На клиенте (CAPICOM + C++)
IStorePtr store(__uuidof(Store));
HRESULT hr = store->Open(CAPICOM_CURRENT_USER_STORE, _T("My"), CAPICOM_STORE_OPEN_READ_ONLY);
if (FAILED(hr))
return hr;
ICertificates2Ptr ptr(store->Certificates);
ICertificates2Ptr selected = ptr->Select(_T(""), _T(""), VARIANT_FALSE);
ICertificate2Ptr p(selected->Item[1]);
ISignerPtr signer(__uuidof(CAPICOM::Signer));
signer->PutCertificate(CComQIPtr(p));
ISignedDataPtr data(__uuidof(SignedData));
data->put_Content(*m_Xml);
bstr_t signature = data->Sign(signer, FALSE, CAPICOM_ENCODE_BASE64);
m_Signature = new CComBSTR(signature.GetBSTR());
byte[] data = Convert.FromBase64String(signature);
SignedCms cms = new SignedCms();
cms.Decode(signed);
Отправил
Das Ich
в
2:27 PM
0
раз прокомментировано
Метки: программирование, работа, windows