Добрый день!
Стоит задача подписывать данные в браузере через JavaApplet с помощью закрытого ключа p12 и проверять правильность подписи на сервере (C#) с помощь открытого сертификата из базы данных.
Стали изучать функционал на примерах.
Клиентская часть
1. В JavaApplet замечательно работает подпись и проверка простых данных (PlainData).
2. Подпись в PKCS7 тоже работает, но проверка не работает, все время пишет Ошибка при постановке подписи.
Хорошо, в браузере нам нужна только подпись, она работает.
Переходим к проверке на сервер. Проверяем, как работает простая подпись в тестовом приложении на C# XMLTest2008 с использование IolaCOM.dll.
Простая подпись
1. Подписываем текст "Test1" простой подписью (CF_DRAFT_DATA), всё ок, только настораживает, что результат на выходе не как в JavaApplet.
2. Проверяем простую подпись, результат ВСЕГДА "подпись не верна", только на английском.
3. Думал, может в примере на C# ошибка, но в примере на Delphi результат точно такой же.
Подпись PKCS7
1. Подписываем текст "Test1" без CF_DRAFT_DATA, всё ок, но результат на выходе не как в JavaApplet с PKCS7.
2. Проверяем подпись PKCS7, подпись верна, отлично!
3. Вставляем подпись из JavaApplet (она отличается от подписи в XMLTest2008) и делаем проверку, подпись тоже верна! Странно, но факт.
Казалось бы, все отлично, подпишем данные в JavaApplet в PKCS7 с помощью закрытого ключа p12, проверим подпись на сервере C# PKCS7 с помощью открытого сертификата.
Но, при тестировании проверки правильности подписи на сервере C# выяснилось, что подпись в PKCS7 проверяется и без сертификата открытого ключа, т.е. подпись из JavaApplet PKCS7 содержит сертификат и все самодостаточно.
Подпись верна, но как выяснить, кем данные были подписаны?
Собственно вопросы:
1. Возможна ли как-то проверка ЭЦП при использовании простой подписи в IolaCOM.dll? Тестовые примеры на C# и Delphi всегда выдают подпись неверна. Тестировали IolaCOM.dll 5.9.0.7 и 6.0.0.1
2. Как вытащить сертификат из подписи PKCS7? Чтобы узнать чей он.
3. Есть ли возможность передавать сертификат в IolaCOM.dll не как путь к файлу сертификата, а как данные, т.к. планируется хранить сертификаты в БД, а не на диске.
Заранее благодарен за любую помощь!