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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top