将 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) 总是“失败”
我需要做什么?
其他提示
您可以看到它所实现的功能 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
以避免配置信任存储来验证服务器证书。
作为我使用的脚本 测试.js 其中包含相同的OP,显示了该问题:
page = require('webpage').create()
page.open('https://myproject', function(status) {
page.render('C:/temp/connect.png');
console.log(status);
phantom.exit();
})
客户证书支持实际上已经实施了自原始接受答案以来已经实施。我在发布这一点,以帮助其他会遇到这个问题的人。您可以在 phantomjs的cli指令中找到x509 / pki证书支持的参数/ a>:
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
.