2014-01-08 45 views
9

我需要訪問通過客戶端證書保護的內部站點。因此,爲了使用phantomjs,我導出了我在Firefox中使用的證書以訪問該站點,並使用openssl命令行將其轉換爲私鑰和證書。我現在是什麼phantomjs在訪問服務器上的頁面時將該證書呈現給ssl服務器。我該怎麼做?將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(狀態)總是'失敗'

我需要做什麼?

回答

8

它的實施可以在 github project看到的特點,就是它是不是已經包含在實際的穩定版本(2.0.0)中,但計劃包含在 2.0.1 release中。同時你可以從 here下載2.0.1版本(鏈接來自git討論)。

我嘗試使用 2.0.1版本,我可以訪問該網站正確地傳遞SSL客戶端授權與後續的命令:

最後新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我使用如下命令提取證書和私鑰:

提取證書爲--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(); 
}) 
+0

這真是太棒了,他們把這個添加爲一個簡單的CLI標誌終於不是了嗎?感謝您一年前就此問題所做的所有工作,並更新了您接受的答案,以包括幾個月前我發佈的CLI標誌^ _^ – stevenhaddox

+0

@stevenhaddox感謝您的評論,不幸的是這不是公認的答案:),並且我在2015年的第一次修訂中添加了CLI參數,我只編輯答案以使格式更好,因爲最近我收到並註冊了。至少有這個功能是很好的。 – albciff

+0

所以你做到了!我完全忽略了舊格式的旗幟,所以這絕對是一個值得歡迎的改變!保持良好的工作:) – stevenhaddox

6

客戶端證書支持,實際上已經從原來接受的答案實現。我發佈這個帖子是爲了幫助那些也會遇到這個問題的人。您可以在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 
相關問題