这是前面问题(Authenticating Selenium WebDriver (Java) with .p12 certificate)的延续。我找到了该问题的部分解决方案,但被困在这里。
我创建了一个名为“eAgency-Client1”的firefox配置文件,遵循与这些类似的指示:https ://seleniumbycharan.wordpress.com/2015/07/12/how-to-create-custom-firefox-profile-in-selenium-网络驱动程序/
我有一个名为“client1.p12”的证书,用于对服务器进行身份验证。我设置了上述配置文件以使用该证书。在配置文件创建过程中的第 7 步之后,我转到新打开的 Firefox 浏览器并转到选项->隐私和安全->证书->查看证书,选择“您的证书”选项卡,单击“导入”,浏览到“client1.p12”文件并输入密码。
我正在将此配置文件(“eAgency-Client1”)与 Selenium 一起使用。我使用 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);
. . .
driver.get(<URL>);
不幸的是,这段代码在我的本地机器和 Jenkins 服务器上的功能不同。我通过打印页面源来检查这一点。
当我在本地运行它时,结果源是我期望的(这里复制太长了。)当我在 Jenkins 中运行它时,我得到以下信息:
<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>
这是我在开始使用该配置文件之前在本地获得的内容。它表明“client1.p12”没有被发送。一旦我开始使用配置文件,配置文件将允许 Firefox 发送证书。但是,我知道该配置文件已成功复制到 Jenkins 并正在使用,因为如果它不是以下行
FirefoxProfile ffProfile = profile.getProfile("eAgency-Client1");
将返回一个空值。它没有,所以它返回的配置文件是合法的。此配置文件与我在本地拥有的配置文件相同,它应该具有提供证书的信息。但是,它似乎没有发送证书。
有谁知道这是怎么发生的?证据表明配置文件允许用户发送证书。证据还表明 Jenkins 项目正在使用该配置文件。但是,看起来证书也没有被发送。
知道薄弱环节可能是什么吗?