Автоматизация диалога выбора цифрового сертификата - PullRequest
4 голосов
/ 07 апреля 2010

Я использую WatiN (2.0.10.928) с C # и Visual Studio 2008 для тестирования защищенного SSL-сайта, который требует сертификат.При переходе на домашнюю страницу отображается диалоговое окно «Выбор цифрового сертификата», требующее выбора действующего сертификата и нажатия кнопки «ОК».

Я ищу способ автоматизации выбора сертификата.так что каждый раз, когда выполняется новый тест или прибор (и мой браузер перезагружается), мне не нужно вручную вмешиваться в автоматический тест и выбирать сертификат.Я пытался использовать различные классы WatiN Dialog Handler и даже изучал использование Win32 API для автоматизации этого, но мне не повезло.

Наконец-то я нашел решение, но оно добавляет еще одну зависимость к решению (сторонняя библиотека AutoIT).Поскольку это решение не является идеальным, но работает и является лучшим, которое я смог найти, я опубликую решение и отмечу его как ответ, но Я все еще ищу готовое решение WatiN это больше соответствует остальной части моего кода и тестовых приспособлений.

Спасибо за ваши ответы!

Ответы [ 3 ]

3 голосов
/ 20 апреля 2010

В моей ситуации у меня есть ровно один прикрепленный сертификат, поэтому я должен выбрать тот, который существует только в списке, поэтому у меня действительно просто DialogHandler для этого - он нажимает на кнопку, только если он может обработатьдиалог:

public class CertificateChoosingHandler : BaseDialogHandler
{
    public override bool HandleDialog(Window window)
    {
        new WinButton(1, window.Hwnd).Click();
        return true;
    }

    public override bool CanHandleDialog(Window window)
    {
        return window.StyleInHex == "94C808CC";
    }
} 

AFAIR это решение не будет работать в Windows 7.

РЕДАКТИРОВАТЬ: Я забыл о чем-то полезном.Когда я обнаружил, что это решение не работает в Windows 7, я обнаружил очень интересную опцию в IE Internet Options где-то на «Пользовательском уровне»: Не запрашивать выбор сертификата клиента, когда нет сертификатов или существует только один сертификат .Поэтому я добавил свой сайт к доверенным сайтам и отредактировал настройки, и теперь мне нет необходимости использовать этот DialogHandler, но он все еще может использоваться, даже если диалоговое окно не появляется.Если неясно, что я написал, вот как Включить запрос сертификата в Internet Explorer для отображения диалога сертификата.

0 голосов
/ 27 ноября 2012

Я понял подсказку @ prostynick и автоматизировал ее. Как правило, если вы ВКЛЮЧИТЕ параметр « Не запрашивать выбор сертификата клиента, когда в настройках безопасности IE нет сертификатов или только один сертификат », тогда весь диалог не появится (если у вас есть только один сертификат или нет, то есть).

Итак, мы просто должны убедиться, что у пользователя включена эта настройка, прежде чем мы инициализируем ваш объект WebBrowser. А так как эти настройки удобно хранятся в реестре, мы можем сделать это сами, не беспокоя пользователя. Вот код, который делает именно это:

// What this does is changes this setting in Internet Explorer: 
//   Tools -> Internet Options -> Security -> Custom Level -> 
//   Don't prompt for client certificate selection when no certificates 
//   or only one certificate exists -> ENABLE
//
// If you're not convinced that we need this, please reset all the security 
// levels in IE to the default settings, comment out this code, and try to fetch 
//    <your url>. 
//
// If it finishes, great! Then leave it commented out. Otherwise, curse and accept
// that we need this ugly hack OR that we need to instruct people to find & change 
// some unholy IE setting...
RegistryKey stupidBrokenDefaultSetting = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", true);
stupidBrokenDefaultSetting.SetValue("1A04", "0", RegistryValueKind.DWord);

Я не уверен, работает ли это у всех, или вам нужны права администратора или что-то в этом роде, но у меня это работает.

0 голосов
/ 07 апреля 2010

Лучшее решение, которое я смог найти, было размещено здесь: http://andrey -zhukov.blogspot.com / 2009/10 / недавно-я-хотел-выбрать-digital.html

Как указано в сообщении, требуется ссылка на библиотеку AutoIT: http://www.autoitscript.com/autoit3/index.shtml

...