将ssl证书提供给phantomjs的正确方法是什么?

时间:2014-01-08 16:36:30

标签: ssl phantomjs

我需要访问通过客户端证书保护的内部站点。因此,为了使用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)总是'失败'

我需要做什么?

3 个答案:

答案 0 :(得分:11)

您可以在github project上看到它实现的功能,事实是它还没有包含在实际的稳定版本(2.0.0)中,但它&# 39;计划被列入2.0.1 release。同时你可以从here下载2.0.1版本(链接来自git讨论)。

我尝试使用2.0.1版本,我可以通过以下命令正确访问该站点:

最后发布了包含此功能的新PhantomJS 2.1版本,您可以从here下载并使用以下命令测试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我使用以下命令提取证书和私钥:< / p>

提取--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来避免配置信任存储以验证服务器证书。

作为脚本,我使用 test.js ,其中包含相同的OP显示问题:

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

答案 1 :(得分:5)

自最初接受的答案以来,实际上已经实施了客户端证书支持。我发布这个是为了帮助那些偶然发现这个问题的人。您可以在PhantomJS's CLI instructions中找到用于启用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

答案 2 :(得分:4)

我也在寻找决定。它没有实现 https://github.com/ariya/phantomjs/issues/10524

“ - ssl-certificates-path” - 用于CA证书