1

Возможно ли цифровое оформление с помощью Windows? Тот же самый код, который работает с консольным приложения, не работает от службы Windows,Цифровая подпись с использованием Microsoft CryptoAPI из службы Windows?

Я получил folllowing ошибки при попытке поставить цифровую подпись:

System.InvalidOperationException: Текущая сессия не интерактивная. в System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW (CRYPTUI_SELECTCERTIFICATE_STRUCTW CSC) в System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromStore (SafeCertStoreHandle safeSourceStoreHandle, строка заголовка, строка сообщения, X509SelectionFlag selectionFlags, IntPtr hwndParent) в системе .Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollectionHelper (X509Certificate2Collection сертификаты, Строка название, строка сообщения, X509SelectionFlag SelectionFlag, IntPtr hwndParent) при System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection (X509Certificate2Collection сертификаты, строка заголовка, ул ИНГ сообщение, X509SelectionFlag SelectionFlag)

Похоже служба Windows не может ссылаться на GUI, который предлагает список сертификатов, чтобы выбрать или окно для PIN-кода? Служба работает как LocalSystem, которая является администратором. Я также добавил app.manifest со следующими настройками:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Возможно ли использовать услугу win для этой функции?

ответ

0

Метод, который вы используете, открывает диалоговое окно, позволяющее просматривать и выбирать сертификаты для использования. У службы обычно нет пользовательского интерфейса (поскольку они работают за пределами интерактивного сеанса пользователя). Я считаю, что вы можете иметь интерактивные услуги, но я бы не рекомендовал его в этом случае. Используйте другой способ выбора сертификата, возможно, на основе отпечатка требуемого сертификата, например. How to get X509Certificate from certificate store and generate xml signature data?

+0

Проблема в том, что пользователь должен выбрать сертификат и подписать его с закрытым ключом на смарт-карте. Я не знаю, перед каким сертификатом будет использоваться. Кроме того, при подписании с закрытым ключом также появляется диалоговое окно pop pop windows, которое предлагает ввод ключа. – nemke

+0

Какова мотивация запуска приложения в качестве сервиса? – Ananke

+0

Это сервис HttpListener в win, который слушает на локальном хост-узле и позволяет получать цифровые подписи с персонального электронного идентификатора с общедоступного веб-сайта. – nemke

1

Возможно, вы захотите включить обнаружение интерактивных служб (имя службы - UI0Detect).

Interactive Services Detection

Эта услуга позволит Вам открыть диалоговые окна в специальной сессии 0. Это работает с Vista. Появится окно, информирующее вас (в настоящее время зарегистрированный пользователь), что службе требуется взаимодействие с рабочим столом (т. Е. Ввод PIN для доступа к закрытому ключу).

Вы можете прочитать более подробную информацию о сессии 0 и интерактивных служб обнаружения here

+0

Хм, я попробую. Я начал переносить службу win на бесформенное приложение systray. Но режим любопытства включен :) – nemke

+0

Ну, сначала я решил эту проблему в своем Win10 http://blogs.technet.com/b/home_is_where_i_lay_my_head/archive/2012/10/09/windows-8-interactive-services-detection- error-1-correct-function.aspx Затем отображается сообщение, но оно блокирует мою клавиатуру и мышь, фон пуст. Также он не смог найти сертификат, и графический интерфейс не показал никакого сертификата. Я думаю, что я откажусь от разработки WIn в пользу бесформенного приложения. – nemke

+1

У меня не было проблем с этим. Но тогда это были окна 2008 года, и мы отказались от концепции сеанса 0 в пользу опции параметров запуска службы. – pepo