如何正确地将SSL证书导入PhantomJS?

9
我需要访问一个通过客户端证书保护的内部网站。因此,为了使用PhantomJS,我将在Firefox中使用的证书导出到私钥和证书,并使用openssl命令行转换。现在,当访问服务器上的页面时,我希望phantomjs向ssl服务器提供该证书。我该怎么做?
我尝试了以下方法:
phantomjs --ssl-certificates-path=/etc/pki  --ignore-ssl-errors=yes --proxy=myproxy:myport test.js

/etc/pki是我放置证书和密钥的路径。

test.js只是这样的;-

page = require('webpage').create()
page.open('https://myprotectedsite/', function(status) {
console.log(status);
phantom.exit();
})

但是它没有起作用。console.log(status)总是返回'fail'

我需要做什么?

3个回答

12

这个特性已经被实现了,在github项目中可以看到。问题是它还没有包含在当前的稳定版本(2.0.0)中,但计划将其包括在2.0.1版本中。与此同时,您可以从这里下载2.0.1版本的构建(链接来自Git讨论)。

我尝试使用2.0.1版本,并使用以下命令正确访问站点并通过SSL客户端授权:

最终发布了新的PhantomJS 2.1版本,其中包括此功能,您可以从这里下载并使用以下命令测试SSL客户端授权:

phantomjs --ssl-client-certificate-file=C:\tmp\clientcert.cer 
          --ssl-client-key-file=C:\tmp\clientcert.key 
          --ssl-client-key-passphrase=1111 
          --ignore-ssl-errors=true 
          C:\tmp\test.js

注释

我只在Windows上进行了测试。

我尝试使用PKCS12文件作为密钥库,但似乎这种格式不起作用,因此我使用openssl提取证书和私钥,使用以下命令:

提取证书以用于参数--ssl-client-certificate-file

openssl pkcs12 -nokeys -clcerts -in a.p12 -out clientcert.cer

提取--ssl-client-key-file参数的密钥

openssl pkcs12 -nocerts -in a.p12 -out clientcert.key

此外,我使用 --ignore-ssl-errors=true 来避免配置信任存储库以验证服务器证书。

作为脚本,我使用包含与问题中相同的哈希值 OP 的 test.js

page = require('webpage').create()
page.open('https://myproject', function(status) {
      page.render('C:/temp/connect.png');
      console.log(status);
      phantom.exit();
})

太棒了,他们终于添加了这个简单的CLI标志,不是吗?感谢您一年前关于这个问题所做的所有工作,并更新您接受的答案以包括我几个月前发布的CLI标志^_^ - stevenhaddox
@stevenhaddox 感谢您的评论,不幸的是这不是被接受的答案 :), 我在2015年的第一版中添加了CLI参数,我只是编辑了答案以使格式更好,因为最近我收到了一个赞。至少拥有这个功能很不错。 - albciff
是的,你做到了!我完全忽略了你在旧格式中的标志,所以这绝对是一个受欢迎的改变!继续保持好工作 :) - stevenhaddox
另外,我使用 --ignore-ssl-error=true ... 它可以忽略错误;--ignore-ssl-errors=true - m3nda
@erm3nda 对的,在下面的命令中我写对了,但是在解释中打错了。谢谢。 - albciff
显示剩余2条评论

5

实际上,客户端证书支持已经在原始的接受答案中得到了实现。我发布这篇文章是为了帮助其他人遇到同样问题的解决方案。您可以在PhantomJS命令行指南中找到启用X509/PKI证书支持的参数:

phantomjs --ssl-certificates-path=/path/to/pki/rootCA.pem
          --ssl-client-certificate-file=/path/to/pki/cert.pem
          --ssl-client-key-file=/path/to/pki/cert.np.key

4

谢谢。虽然这是一个否定的答案,但至少我知道不必再花时间在PhantomJS上了。 - John Small

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接