какъв е правилният начин за подаване на 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'

Какво трябва да направя?


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


Отговори (3)


И аз търся решението. не е внедрено https://github.com/ariya/phantomjs/issues/10524

"--ssl-certificates-path" - Използва се за CA сертификат

person sergiussergius    schedule 09.01.2014
comment
Благодаря. Това отговори на въпроса, въпреки че отговорът е отрицателен, поне знам да не прекарвам повече време с PhantomJS - person John Small; 10.01.2014

Функцията, която е внедрена, можете да видите в github project, работата е там, че е все още не е включено в действителната стабилна версия (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();
})
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 сертификат в 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
person stevenhaddox    schedule 22.09.2016