我花了几天时间想办法解决这个问题。
我有一个项目,我正在尝试创建一个Selenium WebDriver测试套件。此站点打算通过2因素身份验证进行保护。这两个因素将用于传递一个证书,该证书将与服务器进行身份验证。
目前,我们已经有了它,因此可以使用以https://“.”开头的url访问服务器。当我们进入url (在firefox中)时,会看到一个弹出式的标签为“用户标识请求”的弹出,并带有标签“选择一个证书作为标识:”。
早些时候,我添加了证书(标记为"client1.p12"),方法是转到选项->Privacy&Security->,选择“”选项卡,单击"Import",浏览到"client1.p12“文件并输入密码。通过这样做,我现在可以在“选择要呈现的证书”中看到适当的证书。下楼。
我的问题是如何设置Selenium WebDriver来选择证书。上面描述的弹出是一个Windows组件(不是html),所以我不能简单地单击并选择证书。我也在尝试使用无头的选项为壁虎司机。
我所能找到的最佳解决方案涉及以下几个方面:
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()“;
发布于 2018-03-01 22:31:47
我已经想出了一个部分的解决办法。在其他情况下,这可能是我所需要的,但由于我最后会描述的理由,这是不够的。
这个问题有两个方面。首先,我需要设置Selenium来接受服务器的证书。其次,我需要获得Selenium以将.p12证书传递给服务器。
为了接受服务器的证书,我执行了如下操作:
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以使用该配置文件:
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文件。)
我知道档案被成功复制是因为。。。
FirefoxProfile ffProfile = profile.getProfile("eAgency-Client1");。。。不返回null。当我访问这个网站时,麻烦就来了。当我访问该站点并获取页面源时,我可以看到标准错误,它表明我没有发送证书:
<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坏的要求“。
https://stackoverflow.com/questions/49037666
复制相似问题