Usando certificados de cliente com wget

7

Não consigo usar o wget para usar os certificados do cliente. A documentação fala sobre o uso do sinalizador --certificate.

O uso do sinalizador de certificado é claro, eu o configurei para usar a versão PEM do certificado de cliente.

Mas quando me conecto, recebo o seguinte erro:

HTTP request sent, awaiting response... Read error (error:14094410:SSL routines:
SSL3_READ_BYTES:sslv3 alert handshake failure; error:140940E5:SSL routines:SSL3_
READ_BYTES:ssl handshake failure) in headers.
Giving up.
Falha de handshake

ssl significa que o cliente não forneceu um certificado de cliente correto. Ainda o certificado do cliente que uso, funciona em um navegador.

Nota: Quando desativo a autenticação do cliente no servidor, o wget pode se conectar. Nota: O uso de curl é sugerido, mas eu gostaria de evitar a troca.

    
por Bart De Vos 12.10.2009 / 19:58

6 respostas

6

Estudei uma semana sobre isso, finalmente, com a ajuda que recebi dessa página.

O comando que eu usei para conectar é: "wget --ca-cert = /etc/ssl/certs/winhostname.pem --certificate = /etc/SSL/Portal/LinuxHost.pem --private-key = /etc/SSL/Portal/linuxHost.key link "

    
por 01.02.2013 / 13:00
4

Tem certeza de que a autenticação de certificado de cliente SSL está funcionando em seu servidor?

Acabei de testar que posso pegar meu certificado (no formato PKCS12), convertê-lo em um arquivo de certificado e chave no formato PEM e usá-lo com o wget.

Eu posso provocar três condições de erro, nenhuma das quais corresponde ao que você está relatando:

  1. falha ao fornecer meu arquivo de chave: 400 Solicitação incorreta
  2. fornecendo uma chave inválida: EVP_DecryptFinal_ex: decodificação incorreta do OpenSSL
  3. fornecendo um certificado válido que o servidor não gosta: 403 proibido

Estou usando o nginx; você não menciona o que está usando, então não tenho certeza se o Apache retornaria as mesmas respostas.

Eu sugeriria pegar o seu certificado e chave, combinando-o no PKCS12 (ou apenas importando-o como PEM se o seu navegador suportar o formato) e garantindo que tudo está trabalhando nessa frente primeiro.

Se você já fez isso, talvez você possa tentar de outra máquina para garantir que não seja algo estranho com a versão do OpenSSL que você está usando.

Por fim, tente usar o OpenSSL no modo s_client:

openssl s_client -cert cert.pem -key req.pem -connect host:port -debug

E veja se as coisas funcionam nesse nível. Se assim for, então algo está instável com wget e você pode querer re-construir ou reinstalá-lo. Caso contrário, o nível de saída de depuração pode ajudá-lo a identificar mais o problema do que a saída de depuração do wget.

    
por 12.10.2009 / 22:58
2

Eu usei com sucesso o wget assim:

"C:\program files\GnuWin32\bin\wget" --no-check-certificate --certificate=C:\Users\Alex\xxx.pem --private-key=C:\Users\Alex\xxx.pem --input-file=retain.url --output-document=retain.xml

Observe o --private-key option . O site retain.url tem o link

No entanto, agora me pergunta "Digite a senha do PEM:".

Se eu digitar a senha, tudo funciona bem, mas alguém conhece uma maneira de contornar o prompt?

    
por 11.11.2009 / 17:08
0

É possível que o wget esteja se conectando à porta 80? Esse erro é muito semelhante aos erros que recebo no teste quando acidentalmente tive HTTP escutando 80 e 443-wget estava tentando falar SSL e não obtendo a resposta que queria.

    
por 12.10.2009 / 20:39
0

Obtenha uma captura de rede e carregue-a no Wireshark. Isso deve fornecer uma visão mais clara do que está falhando no nível SSL / TLS.

    
por 31.10.2009 / 20:34
0

Houve problemas com o SSLv3 em versões como 0.9.8.

Tente passar -no_ticket para openssl s_client ou se -ssl2 funcionar

    
por 30.06.2010 / 00:39