【问题标题】:Automating the Choose a digital certificate dialog自动化选择数字证书对话框
【发布时间】:2010-04-06 21:28:35
【问题描述】:

我正在使用带有 C# 和 Visual Studio 2008 的 WatiN (2.0.10.928) 来测试需要证书的 SSL 安全网站。当您导航到主页时,会显示“选择数字证书”对话框,要求您选择有效的证书并单击“确定”按钮。

我正在寻找一种自动选择证书的方法,以便每次执行新测试或固定装置(并且我的浏览器重新启动)时,我都不必手动干扰自动测试并选择证书。我尝试过使用各种 WatiN Dialog Handler 类,甚至研究过使用 Win32 API 来自动执行此操作,但运气不佳。

我终于找到了一个解决方案,但它为解决方案添加了另一个依赖项(一个名为 AutoIT 的第三方库)。由于此解决方案并不理想但确实有效并且是我能找到的最佳解决方案,因此我将发布解决方案并将其标记为答案,但 我仍在寻找“开箱即用”的 WatiN 解决方案 这与我的其余代码和测试装置更加一致。

感谢您的回复!

【问题讨论】:

    标签: c# testing ssl automation watin


    【解决方案1】:

    在我的情况下,我只附加了一个证书,所以我必须选择一个并且只存在于列表中,所以我有一个非常简单的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 选项中发现了一个非常有趣的选项:当没有证书或仅存在一个证书时,不提示选择客户端证书时间>。所以我已经将我的站点添加到受信任的站点并编辑了设置,现在我不需要使用这个DialogHandler,但即使没有出现对话框,它仍然可以使用。如果不清楚,我写的,这里是如何Enable Prompt for Certificate in Internet Explorer 显示证书对话框。

    【讨论】:

    • 感谢您的回复!你的情况和我类似。事实上,我已经修改了我原来的解决方案,只需单击“确定”即可。我正在使用您的解决方案,因为它是“开箱即用”的 WatiN 解决方案,并且没有任何第三方依赖项。
    【解决方案2】:

    到目前为止我能找到的最佳解决方案已发布在这里: http://andrey-zhukov.blogspot.com/2009/10/recently-i-wanted-to-choose-digital.html

    如帖子中所述,它需要引用 AutoIT 库:http://www.autoitscript.com/autoit3/index.shtml

    【讨论】:

    • 如果您有多个证书需要选择,您可能需要将此解决方案的部分内容添加到 Accepted Answer 解决方案中。
    • 看起来那个博客已经死了,你能在这里添加那个信息吗?
    • 抱歉链接断开...我似乎找不到该帖子(甚至找不到它的缓存版本)。无论如何,您最好使用公认的答案或使用 AutoIT 库。
    【解决方案3】:

    我接受了@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);
    

    我不确定这是否适用于所有人,或者您是否需要管理员权限或其他什么,但它适用于我。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2018-03-20
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多