Я понял подсказку @ 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);
Я не уверен, работает ли это у всех, или вам нужны права администратора или что-то в этом роде, но у меня это работает.