Usar certificados de cliente con wget

8

No puedo obtener wget para usar los certificados de cliente. La documentación habla sobre el uso de la bandera --certificate.

El uso del indicador de certificado es claro, lo configuré para usar la versión PEM del certificado del cliente.

Pero cuando me conecto me sale el siguiente error:

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.

La falla de protocolo de enlace SSL significa que el cliente no proporcionó un certificado de cliente correcto. Aún así, el certificado de cliente que uso funciona en un navegador.

Nota: Cuando desactivo la autenticación del cliente en el servidor, wget puede conectarse. Nota: Se sugiere el uso de curl, pero me gustaría evitar el cambio.

Bart De Vos
fuente
Hice una solución: defina un VirtualHost en Apache sin autenticación de certificado de cliente, configure DocRoot en el mismo directorio y configure Permitir desde a la dirección de host local.

Respuestas:

7

Estudié una semana sobre esto, finalmente con la ayuda que obtuve de esta página.

El comando que solía conectar es:

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
fuente
¡me has alegrado el día!
Peter Butkovic
4

¿Está seguro de que la autenticación de certificado de cliente SSL funciona en su servidor?

Acabo de probar que puedo tomar mi certificado (en formato PKCS12), convertirlo en un archivo de certificado y clave en formato PEM y usarlo con wget perfectamente.

Puedo provocar tres condiciones de error, ninguna de las cuales coincide con lo que informa:

  1. no proporcionar mi archivo de clave: 400 Solicitud incorrecta
  2. proporcionando una clave incorrecta: EVP_DecryptFinal_ex: descifrado incorrecto de OpenSSL
  3. proporcionar un certificado válido de que al servidor no le gusta: 403 prohibido

Estoy usando nginx; no mencionas lo que estás usando, así que no estoy seguro si Apache devolverá las mismas respuestas.

Sugeriría tomar su certificado y clave, combinarlo en PKCS12 (o simplemente importarlo como PEM si su navegador admite el formato) y asegurarse de que todo funcione en ese frente primero.

Si ya lo ha hecho, tal vez pueda intentarlo desde otra máquina para asegurarse de que no sea algo extraño con la versión de OpenSSL que está utilizando.

Por último, intente usar OpenSSL en modo s_client:

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

Y ver si las cosas funcionan a ese nivel. Si es así, entonces hay algo raro con wget y es posible que desee volver a compilarlo o reinstalarlo. De lo contrario, el nivel de salida de depuración puede ayudarlo a identificar el problema más de lo que lo haría la salida de depuración de wget.

James F
fuente
Intenté todas sus sugerencias: 1. El certificado funciona bien en 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 (binario), Win XP SP3 3 De otra máquina: mismo resultado 4. Recibí el certificado de Comodo. Cert y key son todo en uno. Intenté lo siguiente: 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 (Continúa en el siguiente comentario)
Todos dieron el mismo error: <br> error al configurar la clave privada <br> 8584: error: 0B080074: certificado x509 <br> rutinas: X509_check_private_key: valores clave <br> Observe que se trata de un error diferente y luego no coinciden:. \ Crypto \ x509 \ x509_cmp.c: 399:
Estás confundiendo tus certificados y claves. Hasta que no funcione con openssl s_client, puede estar seguro de que está pasando el archivo (contenido) incorrecto a wget. Mire dentro de los archivos y vea si están etiquetados (generalmente están con algo como --- BEGIN PRIVATE KEY --- o --- BEGIN RSA KEY --- o --- BEGIN CERTIFICATE --- ... etc. .que le dirá lo que hay en los archivos)
Ram
2

He utilizado con éxito wget como este:

"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

Tenga en cuenta el --private-key option. retiene.url tiene https: //bla.bla.bla

Sin embargo, ahora me indica "Ingrese la frase de paso PEM:".

Si ingreso la contraseña, funciona bien, pero ¿alguien sabe cómo evitar el aviso?

Bart De Vos
fuente
44
Cree una copia de la clave sin ninguna frase de paso: openssl rsa -in key.pem -out keyout.pem
pehrs
0

¿Es posible que wget se conecte al puerto 80? Ese error es muy similar a los errores que recibo en las pruebas cuando accidentalmente tuve que escuchar HTTP 80 y 443-wget intentaba hablar SSL y no obtenía la respuesta que quería.

Josh Budde
fuente
No La URL está en un script, por lo que siempre es la misma. Y cuando pruebo con la autenticación del cliente desactivada, pero https activada, funciona.
0

Obtenga una captura de red y cárguela en Wireshark. Esto debería darle una imagen más clara de lo que está fallando a nivel SSL / TLS.


fuente
0

Ha habido problemas con SSLv3 en versiones como 0.9.8.

Intente pasar -no_ticket a openssl s_client o si -ssl2 funciona

artifex
fuente