как правильно передать ssl-сертификат в phantomjs

Мне нужно получить доступ к внутреннему сайту, защищенному сертификатами на стороне клиента. Поэтому, чтобы использовать phantomjs, я экспортировал сертификат, который использую в Firefox для доступа к сайту, и преобразовал его в закрытый ключ и сертификат с помощью командной строки openssl. Теперь я знаю, какие фантомы представляют этот сертификат серверу 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(статус) всегда "сбой"

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


person John Small    schedule 08.01.2014    source источник


Ответы (3)


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

«--ssl-certificates-path» — используется для сертификата ЦС.

person sergiussergius    schedule 09.01.2014
comment
Спасибо. Это ответ на вопрос, хотя это отрицательный ответ, по крайней мере, я знаю, что больше не буду проводить время с PhantomJS. - person John Small; 10.01.2014

Реализованную функцию вы можете увидеть в проекте 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 show по вопросу:

page = require('webpage').create()
page.open('https://myproject', function(status) {
      page.render('C:/temp/connect.png');
      console.log(status);
      phantom.exit();
})
person albciff    schedule 06.11.2015
comment
Удивительно, что они наконец добавили это как простой флаг CLI, не так ли? Спасибо за всю работу, которую вы проделали год назад по этой проблеме, и за обновление вашего принятого ответа, включив в него флаги CLI, о которых я писал ниже несколько месяцев назад ^_^ - person stevenhaddox; 22.11.2016
comment
@stevenhaddox спасибо за ваш комментарий, к сожалению, это не принятый ответ :), а также я добавил параметры CLI в первую версию 2015 года, я только редактирую ответ, чтобы сделать формат лучше, потому что недавно я получаю и голосую. По крайней мере, приятно иметь эту функцию. - person albciff; 22.11.2016
comment
Так ты и сделал! Я полностью упустил из виду ваши флаги со старым форматом, так что это, безусловно, долгожданное изменение! Продолжайте хорошую работу :) - person stevenhaddox; 22.11.2016
comment
Дополнительно я использую --ignore-ssl-error=true... это ошибки; --ignore-ssl-errors=true - person m3nda; 16.02.2017
comment
@erm3nda правильно, в команде ниже я написал это правильно, но потом в объяснении я делаю опечатку. Спасибо. - person albciff; 16.02.2017
comment
Если мы намеренно добавляем SSL-сертификат и доверяем ему, почему мы добавляем --ignore-ssl-errors=true? если мы игнорируем все ошибки SSL, нам не нужно передавать сертификат SSL. Звуки противоречат мне. - person Man Coding; 30.04.2018
comment
Вы смешиваете концепции, параметры --ssl-client-- предназначены для настройки аутентификации клиента, однако --ignore--ssl-errors позволяет избежать проблем с доверием клиента к сертификату сервера. - person albciff; 02.05.2018

Поддержка клиентских сертификатов фактически была реализована с момента первоначального принятого ответа. Я публикую это, чтобы помочь другим, которые также наткнутся на этот вопрос. Параметры для включения поддержки сертификатов X509/PKI можно найти в инструкциях интерфейса командной строки 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
person stevenhaddox    schedule 22.09.2016