Хромедрайвер в Селене и SSL сертификат - PullRequest
8 голосов
/ 21 июля 2011

Я использую Selenium для тестирования веб-сайта, который имеет HTTP-аутентификацию и теперь даже сертификат SSL.

В качестве обходного пути для базовой аутентификации HTTP я использую ChromeDriver - http://code.google.com/p/selenium/wiki/ChromeDriver и открываю URL в формате

https://username:password@my-test-site.com

Но теперь из соображений безопасности для входа в это приложение необходимо установить сертификат клиента на ПК.

Однако ChromeDriver не видит приглашение «выбрать сертификат», и ядаже не может переключиться на него как Alert.

Кто-нибудь решил эту проблему?

Ответы [ 3 ]

6 голосов
/ 02 февраля 2016

Вы можете указать браузеру Chrome использовать определенный клиентский сертификат для определенного URL-адреса, добавив ключ реестра со следующим содержимым:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls\1 = "{\"pattern\":\"https://www.example.com\",\"filter\":{\"ISSUER\":{\"CN\":\"cn of issuer\"}}}"

Вы можете добавить дополнительные записи, добавив дополнительные ключи под тем жеbranch.

В Linux это немного сложнее, так как вам нужно изменить настройки в формате json в следующем месте:

~/.config/chromium/Default/Preferences

Похоже, что вышеупомянутая опция работает только длямашины присоединяются к домену Active Directory.Если описанные выше шаги не сработают, вы можете попробовать использовать предварительно настроенный шаблон, чтобы представить изменения, доступные для скачивания по следующему адресу: https://www.chromium.org/administrators/policy-templates

5 голосов
/ 21 сентября 2011

Вместо установки сертификата клиента вы можете просто указать Chrome игнорировать ошибку ненадежного сертификата, используя ключ командной строки --ignore-certificate-errors.

Для этого создайте свой экземпляр ChromeDriver следующим образом:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));
driver = new ChromeDriver(capabilities);
1 голос
/ 16 февраля 2018

Я решил эту проблему с кодом ниже

DesiredCapabilities cap = DesiredCapabilities.chrome();
ImmutableMap<String, String> commandLineArguments = ImmutableMap.<String, 
String>builder()
    .put("web-security", "false")
    .put("ssl-protocol", "any")
    .put("ignore-ssl-errors", "true")
    .put("webdriver-loglevel", "DEBUG")
    .put("ssl-client-certificate-file", certificatePath)
    .put("ssl-client-key-passphrase", certificatePassword)
    .build();
String[] params = commandLineArguments.entrySet().stream()
    .map(e -> String.format("--%s=%s", e.getKey(), e.getValue()))
    .collect(Collectors.toList())
    .toArray(new String[0]);
cap.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, params);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new PhantomJSDriver(cap);
driver.get(Url);

Но мне пришлось преобразовать свой сертификат pfx в pem, используя следующую команду

openssl pkcs12 -in client_ssl_cert.pfx -out client_ssl_cert.pem -clcerts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...