В Selenium Chromedriver и сертификат SSL

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

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

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

но теперь из соображений безопасности сертификат клиента должен быть установлен на ПК, чтобы войти в это приложение.

однако ChromeDriver не может видеть "select сертификат " подскажите, и я даже не могу переключиться на него как Alert.

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

3 ответов


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

чтобы сделать это, создайте свой экземпляр ChromeDriver следующим образом:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));
driver = new ChromeDriver(capabilities);

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

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

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

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

~/.config/chromium/Default/Preferences

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


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

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