2011-07-21 20 views
5

Estoy usando Selenium para probar un sitio web que tiene autenticación HTTP y ahora incluso certificado SSL.Chromedriver en Selenium y certificado SSL

Como solución alternativa para HTTP básico Autentificación estoy usando ChromeDriver - http://code.google.com/p/selenium/wiki/ChromeDriver y abrir direcciones URL en formato

https://username:[email protected] 

Pero ahora de razones de seguridad, certificado de cliente necesita ser instalado en el PC con el fin de acceder a dicha aplicación.

Sin embargo, ChromeDriver no puede ver el mensaje "seleccionar certificado" e incluso no puedo cambiarlo a Alerta.

¿Alguien resolvió este problema?

Respuesta

4

En lugar de instalar el Certificado de cliente, puede decirle a Chrome que ignore el error de certificado que no es de confianza mediante el modificador de línea de comando --ignore-certificate-errors.

Para ello, cree la instancia de ChromeDriver de la siguiente manera:

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

El problema es que el sitio al que estoy intentando acceder realmente necesita que se instale el certificado del cliente. Y debido a que tenemos más entornos de prueba, cada entorno necesita un certificado específico ... –

+0

¿Cómo hago esto desde la línea de comando usando el servidor de selenio independiente? – B2K

+0

@PavelJanicek fueron capaces de resolver este problema. ¿Cómo menciono qué certificado elegir en el controlador de Chrome? – Manvi

5

Se puede decir que el navegador Chrome para usar un certificado de cliente específico para una URL particual mediante la adición de una clave de registro con el siguiente contenido:

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

Puede agregar entradas adicionales mediante la adición de claves adicionales bajo la misma bifurcación.

Es un poco más complejo en Linux como sea necesario para modificar las preferencias que se encuentran en formato JSON en la siguiente ubicación:

~/.config/chromium/Default/Preferences 

Parece que la opción anterior sólo funciona para las máquinas se unieron a un Active Directory dominio. En caso de que los pasos anteriores no funcionan Es posible que trate de usar una plantilla preconfigurada para introducir los cambios disponibles para su descarga desde la siguiente URL: https://www.chromium.org/administrators/policy-templates

0

I resuelto este problema con el código de abajo

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); 

, pero tenía para convertir mi certificado pfx a pem usando el siguiente comando

openssl pkcs12 -in client_ssl_cert.pfx -out client_ssl_cert.pem -clcerts