Как правильно использовать 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) всегда 'fail'

Что мне нужно сделать?

3 ответа

Решение

Я тоже ищу решение. он не реализован https://github.com/ariya/phantomjs/issues/10524

"--ssl-сертификата-путь" - используется для сертификата CA

Функцию, которую он реализовал, вы можете увидеть в проекте 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 чтобы избежать настройки доверенного хранилища для проверки сертификата сервера.

В качестве скрипта я использую test.js, который содержит то же самое, имеет показ OP на вопрос:

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

Поддержка сертификатов клиентов фактически была реализована с момента первоначального принятия ответа. Я публикую это, чтобы помочь другим, кто также наткнется на этот вопрос. Вы можете найти параметры для включения поддержки сертификатов X509/PKI в инструкциях CLI PhantomJS:

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
Другие вопросы по тегам