首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WebDriver证书认证Selenium WebDriver (Java)

用WebDriver证书认证Selenium WebDriver (Java)
EN

Stack Overflow用户
提问于 2018-02-28 20:03:56
回答 1查看 2.1K关注 0票数 1

我花了几天时间想办法解决这个问题。

我有一个项目,我正在尝试创建一个Selenium WebDriver测试套件。此站点打算通过2因素身份验证进行保护。这两个因素将用于传递一个证书,该证书将与服务器进行身份验证。

目前,我们已经有了它,因此可以使用以https://“.”开头的url访问服务器。当我们进入url (在firefox中)时,会看到一个弹出式的标签为“用户标识请求”的弹出,并带有标签“选择一个证书作为标识:”。

早些时候,我添加了证书(标记为"client1.p12"),方法是转到选项->Privacy&Security->,选择“”选项卡,单击"Import",浏览到"client1.p12“文件并输入密码。通过这样做,我现在可以在“选择要呈现的证书”中看到适当的证书。下楼。

我的问题是如何设置Selenium WebDriver来选择证书。上面描述的弹出是一个Windows组件(不是html),所以我不能简单地单击并选择证书。我也在尝试使用无头的选项为壁虎司机。

我所能找到的最佳解决方案涉及以下几个方面:

代码语言:javascript
复制
DesiredCapabilities capabilities = new DesiredCapabilities();

capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

capabilities.setCapability("ssl-client-certificate-file", "<path-to-client1.p12>");
capabilities.setCapability("ssl-client-key-passphrase", "<password>");
WebDriver driver = new FirefoxDriver(capabilities);
driver.get(<url>);

不幸的是,我在最后一行得到了"org.openqa.selenium.WebDriverException“,”driver.get()“;

EN

回答 1

Stack Overflow用户

发布于 2018-03-01 22:31:47

我已经想出了一个部分的解决办法。在其他情况下,这可能是我所需要的,但由于我最后会描述的理由,这是不够的。

这个问题有两个方面。首先,我需要设置Selenium来接受服务器的证书。其次,我需要获得Selenium以将.p12证书传递给服务器。

为了接受服务器的证书,我执行了如下操作:

代码语言:javascript
复制
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);
. . . 
FirefoxOptions firefoxOptions = new FirefoxOptions();
. . . 
firefoxOptions.addCapabilities(capabilities);
. . .
driver = new FirefoxDriver(firefoxOptions);
. . . 
driver.get(nbisURL);

为了将.p12证书发送到服务器,我使用了firefox。这个过程的一部分在这里描述:https://seleniumbycharan.wordpress.com/2015/07/12/how-to-create-custom-firefox-profile-in-selenium-webdriver/

本质上,我创建了一个概要文件(“eAgency-Client1 1”),正如本文所描述的那样,这导致了一个开放的firefox浏览器。在那个浏览器中,我以我在原始文章中描述的方式设置了证书。然后,我设置selenium以使用该配置文件:

代码语言:javascript
复制
ProfilesIni profile = new ProfilesIni();
FirefoxProfile ffProfile = profile.getProfile("eAgency-Client1");
ffProfile.setPreference("security.default_personal_cert", "Select Automatically");
. . . 
FirefoxOptions firefoxOptions = new FirefoxOptions();
. . . 
firefoxOptions.setProfile(ffProfile);
. . .
driver = new FirefoxDriver(firefoxOptions);

因此,将上述两个片段交织在一起,将产生我的解决方案。

我现在遇到的问题是,我似乎无法在其他机器上使用该配置文件,因此这个Selenium测试套件是不可移植的。

我负责詹金斯的测试套件。Jenkins运行在一个没有GUI的CentOS服务器上。我将“eAgency 1”概要文件从本地windows机器复制到CentOS服务器的适当位置,并在CentOS上适当地修改了profiles.ini文件。

(我松散地遵循了这里提出的建议,http://forum.notebookreview.com/threads/migrate-firefox-profile-from-windows-to-linux.444601/。但是,我需要将概要文件复制到/var/lib/jenkins/..mozilla/火狐,从而将概要文件添加到Jenkins firefox实例中。我也没有复制整个Mozilla目录。),之后我修改了profiles.ini文件。)

我知道档案被成功复制是因为。。。

代码语言:javascript
复制
FirefoxProfile ffProfile = profile.getProfile("eAgency-Client1");

。。。不返回null。当我访问这个网站时,麻烦就来了。当我访问该站点并获取页面源时,我可以看到标准错误,它表明我没有发送证书:

代码语言:javascript
复制
<html><head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.10.2</center>


</body></html>

我在本地机器上找不到这个消息来源。我的本地机器顺利到达了它需要去的地方。在当地,我没有得到"400坏的要求“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49037666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档