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