Usando certificados de cliente com wget

8

Não consigo obter 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 eu 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 no SSL handshake significa que o cliente não forneceu um certificado de cliente correto. Ainda o certificado de cliente que eu uso, funciona em um navegador.

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

Bart De Vos
fonte
Fiz uma solução alternativa: defina um VirtualHost no Apache sem autenticação de certificado de cliente, configure o DocRoot para o mesmo diretório e defina Permitir para o endereço do host local.

Respostas:

7

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

O comando que eu usei para conectar é:

wget --ca-cert=/etc/ssl/certs/winhostname.pem --certificate=/etc/ssl/private/linuxhost.pem \
     --private-key=/etc/ssl/private/linuxhost.key https://winhostname.home.net:8443/winhosturl.asmx
Wouter
fonte
você fez meu dia!
Peter Butkovic 12/09
4

Você tem certeza de que a autenticação de certificado de cliente SSL está funcionando no 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.

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 incorreta: EVP_DecryptFinal_ex: descriptografia incorreta do OpenSSL
  3. fornecendo um certificado válido que o servidor não gosta: 403 proibido

Eu estou usando nginx; você não menciona o que está usando, por isso não tenho certeza se o Apache retornaria as mesmas respostas.

Sugiro que você pegue seu certificado e sua chave, combine-o no PKCS12 (ou apenas importe-o como PEM se o navegador suportar o formato) e garanta que tudo esteja funcionando primeiro nessa frente.

Se você já fez isso, talvez possa tentar em 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. Nesse caso, algo está complicado com o wget e você pode querer reconstruí-lo ou reinstalá-lo. Caso contrário, o nível de saída de depuração poderá ajudá-lo a identificar o problema mais do que o resultado da depuração do wget.

James F
fonte
Tentei todas as suas sugestões: 1. Cert funciona bem no FF 3.5 2. Servidor: Apache 2.2.11, Openssl 0.9.8i, Windows Server 2003 Cliente: WGET 1.11.4, OpenSSL 0.9.8k (binário), Win XP SP3 3 De outra máquina: mesmo resultado 4. Recebi o certificado da Comodo. Cert e chave são todos em um. Tentei o seguinte: openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key (extraído de cert) openssl s_client -cert cert.pem -key copyofcert.pem (Continuação no próximo comentário)
Todos deram o mesmo erro: <br> erro ao definir chave privada <br> 8584: erro: 0B080074: certificado x509 <br> rotinas: X509_check_private_key: key values ​​<br> Observe que esse erro é diferente da incompatibilidade:. \ Crypto \ x509 \ x509_cmp.c: 399:
Você está confundindo suas certezas e chaves. Até que você funcione com o openssl s_client, você pode ter certeza de que está passando o arquivo (conteúdo) errado para o wget. Olhe dentro dos arquivos e veja se eles estão marcados (geralmente estão com algo como --- BEGIN PRIVATE KEY --- ou --- BEGIN RSA KEY --- ou --- BEGIN CERTIFICATE --- ... etc .. .que irá dizer-lhe o que está nos arquivos)
Ram
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. retenha.url tem https: //bla.bla.bla

No entanto, agora ele me solicita "Inserir senha do PEM:".

Se eu digitar a senha, ela funcionará bem, mas alguém sabe como contornar o prompt?

Bart De Vos
fonte
4
Crie uma cópia da chave sem nenhuma frase secreta: openssl rsa -in key.pem -out keyout.pem
pehrs
0

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

Josh Budde
fonte
Não. O URL está em um script, portanto, é sempre o mesmo. E quando eu testo com a autenticação do cliente desativada, mas https ativada, funciona.
0

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


fonte
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

artifex
fonte