Как правильно использовать 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