Como lidar com o certificado SSL em Selenium

โšก Resumo Inteligente

Erros no certificado SSL interrompem um Selenium O teste รฉ necessรกrio para que o navegador possa rejeitar um certificado nรฃo confiรกvel ou expirado, portanto, cada script do WebDriver precisa de uma funcionalidade especรญfica do navegador que aceite o certificado e permita que a automaรงรฃo continue.

  • ๐Ÿ”˜ Definiรงรฃo: O SSL criptografa o trรกfego entre o navegador e o servidor, e o certificado comprova a identidade do servidor.
  • โ˜‘๏ธ Gatilho de erro: Os navegadores bloqueiam certificados nรฃo confiรกveis, expirados, revogados ou autoassinados e exibem uma pรกgina de aviso.
  • โœ… Firefox: A Firefox O perfil define as opรงรตes setAcceptUntrustedCertificates e setAssumeUntrustedCertificateIssuer antes do driver ser iniciado.
  • ๐Ÿงช Chrome: O parรขmetro DesiredCapabilities com ACCEPT_SSL_CERTS aceita o certificado em Selenium 2 e Selenium 3.
  • ๐Ÿ› ๏ธ Internet Explorer: A JavaO script clica no elemento overridelink para ignorar a pรกgina de aviso.
  • โš ๏ธ Selenium 4: setAcceptInsecureCerts em ChromeOptions, FirefoxOptions ou EdgeOptions substitui DesiredCapabilities.

Como lidar com o certificado SSL em Selenium

Certificado SSL em Selenium

SSL (Secure Sockets Layer) รฉ um protocolo de seguranรงa padrรฃo para estabelecer uma conexรฃo segura entre o servidor e o cliente que รฉ um navegador.

Um certificado SSL protege os dados que trafegam entre o servidor e o aplicativo cliente com criptografia forte e assinatura digital. O proprietรกrio do site instala um certificado SSL ou um certificado de assinatura de cรณdigo.

Benefรญcios do Certificado SSL

Existem vรกrios benefรญcios em usar o certificado SSL, como,

  • Pode-se aumentar a confianรงa de seus usuรกrios e clientes, a fim de aumentar rapidamente o crescimento do negรณcio
  • Esses certificados ajudam a proteger transaรงรตes on-line e informaรงรตes confidenciais dos clientes, como dados de cartรฃo de crรฉdito/dรฉbito, etc.
  • O certificado de assinatura tende a obter um nรบmero mรกximo de downloads e boas crรญticas dos usuรกrios.

Sites protegidos por SSL comeรงam com https:// e vocรช poderรก ver um รญcone de cadeado ou uma barra de endereรงo verde se a conexรฃo for estabelecida com seguranรงa.

Por exemplo, se vocรช deseja fazer alguma transaรงรฃo via net banking ou deseja adquirir um Mobile telefone atravรฉs de um site de comรฉrcio eletrรดnico como Flipkart ou Amazon.

O que acontece entre o navegador da Web e o servidor

  1. Um navegador tenta se conectar a um site protegido por SSL. O navegador solicita que o servidor web se identifique
  2. O servidor envia ao navegador uma cรณpia de seu certificado SSL
  3. O navegador verifica se o certificado SSL รฉ genuรญno. Se sim, ele envia uma mensagem para o servidor
  4. O servidor envia de volta uma confirmaรงรฃo assinada digitalmente para iniciar uma sessรฃo criptografada SSL
  5. Os dados criptografados sรฃo compartilhados entre o servidor e o navegador

Os nรบmeros de cartรฃo e as credenciais de login trafegam durante essa sessรฃo, portanto, a troca de dados precisa permanecer criptografada de ponta a ponta e nรฃo pode ser interceptada.

Por exemplo, o cadeado e a barra de endereรงo abaixo confirmam que o certificado foi aceito.

  1. Formato https://netbanking.hdfcbank.com/netbanking/ .
  2. Pressione Enter.
  3. Vocรช verรก uma barra de endereรงo verde no navegador conforme abaixo: โ€“

Barra de endereรงo verde no navegador para uma pรกgina de internet banking do HDFC protegida com SSL.

Como o certificado SSL cria uma conexรฃo segura

O diagrama abaixo tracรฉ o aperto de mรฃos, e os passos numerados que se seguem explicam cada troca.

Diagrama do handshake SSL entre um navegador web e um servidor web.

  1. Navegador envia solicitaรงรฃo HTTPS para o servidor.
  2. Agora o Servidor deve fornecer alguma identificaรงรฃo ao Navegador para provar que รฉ confiรกvel. Isso pode ser feito enviando uma cรณpia do seu certificado SSL para o navegador.
  3. Cada navegador possui sua prรณpria lista de CAs confiรกveis. O navegador verifica a raiz do certificado em relaรงรฃo ร  sua lista de CAs confiรกveis โ€‹โ€‹e se o certificado nรฃo estรก expirado, nรฃo foi revogado e se o nome comum รฉ vรกlido para o site ao qual estรก se conectando.
  4. Se o navegador confiar no certificado, uma sessรฃo criptografada serรก criada entre o servidor e o navegador.
  5. Servidor e navegador podem enviar mensagens criptografadas

Tipos de certificados SSL

O navegador e o servidor usam o mecanismo de certificado SSL para poder estabelecer uma conexรฃo segura. Esta conexรฃo envolve a verificaรงรฃo de trรชs tipos de certificados.

  • Raiz
  • Nรญvel intermediรกrio
  • Certificado de servidor

Processo de obtenรงรฃo do Certificado SSL

O processo de obtenรงรฃo do certificado SSL inclui as etapas abaixo: โ€“

  1. Primeiro, vocรช deve criar uma solicitaรงรฃo CSR (criar uma solicitaรงรฃo de assinatura de certificado).
  2. A solicitaรงรฃo CSR cria um arquivo de dados CSR, que รฉ enviado ao emissor do certificado SSL conhecido como CA (Autoridade de Certificaรงรฃo).
  3. A CA usa os arquivos de dados CSR para criar o certificado SSL para o seu servidor.
  4. Apรณs receber o certificado SSL, vocรช deverรก instalรก-lo em seu servidor.
  5. Tambรฉm รฉ necessรกrio instalar um certificado intermediรกrio que vincule o seu certificado SSL ao certificado raiz da CA.

A imagem abaixo representa todos os trรชs certificados- Certificado Raiz, Intermediรกrio e Servidor.

Cadeia de certificados mostrando os certificados SSL raiz, intermediรกrios e de servidor.

Como os certificados SSL sรฃo verificados

SSL funciona por meio de uma combinaรงรฃo de programas e rotina de criptografia/descriptografia que existem no computador do servidor web e no navegador do servidor web.

O certificado SSL contรฉm basicamente as informaรงรตes abaixo.

  1. Assunto que รฉ a identidade do proprietรกrio do site.
  2. Informaรงรตes de validade - uma chave pรบblica e uma chave privada.

A chave privada e a chave pรบblica sรฃo duas chaves criptogrรกficas (nรบmeros) exclusivamente relacionadas. Tudo o que for criptografado com a chave pรบblica sรณ poderรก ser descriptografado com a chave privada. O navegador exibe esses campos quando o certificado รฉ inspecionado, como mostrado abaixo.

Painel com detalhes do certificado, listando o assunto, o perรญodo de validade e a chave pรบblica.

Quando uma conexรฃo segura nรฃo รฉ estabelecida entre o servidor e o cliente devido ao certificado, o seguinte erro de certificado SSL serรก manifestado.

Tipos de erro de certificado SSL

Suponha que vocรช digite uma solicitaรงรฃo https e o navegador responda com โ€œEsta conexรฃo nรฃo รฉ confiรกvelโ€ ou โ€œO certificado de seguranรงa do site nรฃo รฉ confiรกvelโ€. O navegador nรฃo conseguiu estabelecer uma conexรฃo segura com o certificado apresentado, portanto, ele interrompe a conexรฃo e solicita que o usuรกrio tome as medidas apropriadas.

Os tipos de erros que vocรช provavelmente verรก devido ao certificado em diferentes navegadores podem ser mais ou menos assim

  1. FogoFox - Esta conexรฃo nรฃo รฉ confiรกvel
  2. Google Chrome โ€“ A seguranรงa deste site nรฃo รฉ confiรกvel.
  3. Internet Explorer (ou seja) โ€“ Este certificado de seguranรงa apresentado por este site nรฃo era confiรกvel por uma autoridade de certificaรงรฃo (CA) confiรกvel

A captura de tela abaixo mostra o intervalo gerado por um certificado nรฃo confiรกvel.

Pรกgina de aviso de conexรฃo nรฃo confiรกvel exibida pelo navegador devido a um certificado SSL invรกlido.

Como lidar com erros de certificado SSL usando Selenium Driver da Web

Suponha que o script de teste A pรกgina "Conexรฃo nรฃo confiรกvel" รฉ exibida acima. O script precisa ser ajustado para que ele lide com a exceรงรฃo SSL por conta prรณpria, puramente atravรฉs de automaรงรฃo.

A alteraรงรฃo depende da instรขncia do navegador em uso, e รฉ aรญ que entram os recursos desejados. Os Recursos Desejados configuram a instรขncia do driver de Selenium Webdriver, incluindo ChromeDriver, FirefoxDriver e Internet Explorer.

Os passos abaixo podem ser adicionados a um Selenium Script para resolver o problema de "Conexรฃo nรฃo confiรกvel" em cada navegador.

โš ๏ธ Selenium Nota de 4: A classe DesiredCapabilitys foi removida em Selenium 4. As classes Options do navegador agora carregam a mesma configuraรงรฃo por meio de um รบnico recurso do W3C. aceitarCertificadosInseguros.

Navegador Selenium Classe 4 Ligar
Chrome Opรงรตes do Chrome setAcceptInsecureCerts(true)
Firefox FirefoxOpรงรตes setAcceptInsecureCerts(true)
borda EdgeOptions setAcceptInsecureCerts(true)
Safรกri JavascriptExecutor script de bypass temporรกrio
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(options);

Tratamento de erros de certificado SSL em Firefox

Para lidar com erros de certificado SSL em Firefox, precisamos usar os recursos desejados de Selenium Webdriver e siga os seguintes passos.

Passo 1) Primeiro precisamos criar um novo Firefox profile dizer "meu perfil".

Passo 2) Agora acesse myProfile no script abaixo e crie o FirefoxObjeto de perfil.

ProfilesIni prof = new ProfilesIni()				
FirefoxProfile ffProfile= prof.getProfile ("myProfile")

Passo 3) Agora precisamos definir as propriedades โ€œsetAcceptUntrustedCertificatesโ€ e โ€œsetAssumeUntrustedCertificateIssuerโ€ no Fire. Fox perfil.

ffProfile.setAcceptUntrustedCertificates(true) 
ffProfile.setAssumeUntrustedCertificateIssuer(false)

Passo 4) Agora use o fogoFox perfil no FogoFox objeto motorista.

WebDriver driver = new FirefoxDriver (ffProfile)

Observaรงรฃo: "setAcceptUntrustedCertificates" e "setAssumeUntrustedCertificateIssuerโ€œSรฃo funcionalidades para lidar com erros de certificado em navegadores web.โ€

โš ๏ธ Nota sobre a versรฃo: O cรณdigo baseado em perfil acima tem como alvo Selenium 2 e Selenium 3. Em Selenium 4. Um perfil รฉ anexado atravรฉs de FirefoxOpรงรตes e Firefox Aceita certificados inseguros por padrรฃo.

Tratamento de erros de certificado SSL no Chrome

Para lidar com erros de SSL no Chrome, o objeto DesiredCapabilities abaixo aceita todos os certificados SSL, de forma que o usuรกrio nรฃo veja nenhum aviso de certificado durante a execuรงรฃo.

Precisamos criar uma instรขncia da classe DesiredCapabilities conforme abaixo: -

DesiredCapabilities handlSSLErr = DesiredCapabilities.chrome ()       
handlSSLErr.setCapability (CapabilityType.ACCEPT_SSL_CERTS, true)
WebDriver driver = new ChromeDriver (handlSSLErr);

โš ๏ธ Nota sobre a versรฃo: O CapabilityType.ACCEPT_SSL_CERTS pertence ao antigo protocolo JSON Wire. Substitua-o pelo trecho de cรณdigo ChromeOptions mostrado anteriormente ao executar o comando. Selenium 4.

Tratamento de erros de certificado SSL no IE

Ao contrรกrio do tratamento de certificados SSL no navegador Chrome e FirefoxNo IE, vocรช pode ter que lidar com isso usando javascript.

Para lidar com certificados SSL no IE, vocรช pode resolver essa situaรงรฃo de duas maneiras.

Mรฉtodo 1) Clique no link โ€œContinuar para este site (nรฃo recomendado)โ€ na barra de navegaรงรฃo. Esse link tem o ID โ€œoverridelinkโ€, que vocรช pode confirmar no painel HTML aberto com F12, como mostra a captura de tela abaixo.

Aviso de certificado do Internet Explorer com o link "Continuar para este site"

Clique no link usando o mรฉtodo driver.navigate() com JavaScript conforme abaixo:

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");

Mรฉtodo 2) O segundo mรฉtodo รฉ bastante semelhante ao cรณdigo de tratamento de SSL do Chrome.

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);

O cรณdigo acima ajudarรก a lidar com erros de certificado SSL no IE.

โš ๏ธ Nota sobre a versรฃo: O Internet Explorer 11 foi descontinuado em junho de 2022. Execute o mesmo cenรกrio contra Microsoft Edge Com o EdgeOptions, ou execute o Edge no modo IE quando um aplicativo legado ainda o exigir.

Perguntas Frequentes

O projeto Chromium รฉ executado badssl.com, que serve subdomรญnios expirados, autoassinados, revogados e com hosts incorretos. Aponte um script de teste para expired.badssl.com para reproduzir uma falha real de certificado com seguranรงa.

Nรฃo. Selenium A versรฃo 4 removeu isso em favor das classes Options do navegador. Crie um ChromeOptions. FirefoxObjeto Options ou EdgeOptions, chame setAcceptInsecureCerts(true) e passe-o para o construtor do driver.

Crie um objeto EdgeOptions, chame setAcceptInsecureCerts(true) e passe-o para o construtor EdgeDriver. O padrรฃo corresponde ao do Chrome porque ambos os navegadores compartilham o mecanismo Chromium.

O SafariDriver nรฃo possui a opรงรฃo accept-insecure-certs. Use JavascriptExecutor para executar CertificateWarningController.visitInsecureWebsiteWithTemporaryBypass(), que limpa o aviso intermediรกrio apenas para essa sessรฃo.

ERR_CERT_DATE_INVALID indica um certificado expirado, ERR_CERT_REVOKED um certificado revogado e ERR_CERT_AUTHORITY_INVALID um certificado autoassinado ou de uma autoridade emissora nรฃo confiรกvel. O cรณdigo identifica a causa antes de vocรช alterar qualquer script.

O aprendizado de mรกquina agrupa falhas de certificado por cรณdigo de erro e host, separando um certificado de teste expirado de um defeito genuรญno. Esse agrupamento impede que um problema em um ambiente seja registrado como vรกrios bugs de teste nรฃo relacionados.

Sim. Travas deslizantes portรกteis Copiloto do GitHub O texto descreve o objeto Options e o construtor do driver a partir de um comentรกrio, mas verifique se ele sugere setAcceptInsecureCerts em vez da chamada DesiredCapabilities removida.

Apenas em ambientes de teste. Aceitar todos os certificados oculta falhas de expiraรงรฃo, nome do host e cadeia de certificados; portanto, mantenha essa flag fora dos testes de fumaรงa em produรงรฃo e verifique o certificado explicitamente quando a seguranรงa estiver sendo testada.

Resuma esta postagem com: