Utilisation de certificats clients avec wget

8

Je ne peux pas demander à wget d'utiliser les certificats clients. La documentation parle de l'utilisation de l'indicateur --certificate.

L'utilisation de l'indicateur de certificat est claire, je l'ai configuré pour utiliser la version PEM du certificat client.

Mais lorsque je me connecte, j'obtiens l'erreur suivante:

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.

échec de la prise de contact SSL signifie que le client n'a pas fourni de certificat client correct. Le certificat client que j'utilise fonctionne toujours dans un navigateur.

Remarque: lorsque je désactive l'authentification client sur le serveur, wget peut se connecter. Remarque: L'utilisation de curl est suggérée, mais je voudrais éviter le changement.

Bart De Vos
la source
J'ai fait une solution de contournement: Définissez un VirtualHost dans Apache sans authentification de certificat client, définissez DocRoot sur le même répertoire et définissez Allow from sur l'adresse localhost.

Réponses:

7

J'ai étudié une semaine à ce sujet, enfin avec l'aide que j'ai obtenue de cette page.

La commande que j'ai utilisée pour me connecter est:

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
la source
tu as fait ma journée!
Peter Butkovic
4

Êtes-vous certain que l'authentification par certificat client SSL fonctionne sur votre serveur?

Je viens de tester que je peux prendre mon certificat (au format PKCS12), le convertir en un fichier de certificats et de clés au format PEM et l'utiliser avec wget très bien.

Je peux provoquer trois conditions d'erreur, dont aucune ne correspond à ce que vous signalez:

  1. à défaut de fournir mon fichier de clés: 400 Bad Request
  2. fournir une mauvaise clé: EVP_DecryptFinal_ex: mauvaise décryptage depuis OpenSSL
  3. fournir un cert valide que le serveur n'aime pas: 403 interdit

J'utilise nginx; vous ne mentionnez pas ce que vous utilisez, donc je ne sais pas si Apache retournerait les mêmes réponses.

Je suggère de prendre votre certificat et votre clé, de les combiner dans PKCS12 (ou simplement de les importer en tant que PEM si votre navigateur prend en charge le format) et de vous assurer que tout fonctionne en premier sur ce front.

Si vous l'avez déjà fait, vous pouvez peut-être essayer à partir d'une autre machine pour vous assurer que ce n'est pas quelque chose d'étrange avec la version d'OpenSSL que vous utilisez.

Enfin, essayez d'utiliser OpenSSL en mode s_client:

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

Et voyez si les choses fonctionnent à ce niveau. Si c'est le cas, alors quelque chose est bancal avec wget et vous voudrez peut-être le reconstruire ou le réinstaller. Sinon, le niveau de sortie de débogage peut vous aider à identifier le problème plus que la sortie de débogage de wget.

James F
la source
J'ai essayé toutes vos suggestions: 1. Cert fonctionne correctement dans FF 3.5 2. Serveur: Apache 2.2.11, Openssl 0.9.8i, Windows Server 2003 Client: WGET 1.11.4, OpenSSL 0.9.8k (binaire), Win XP SP3 3 De l'autre machine: même résultat 4. J'ai reçu le certificat de Comodo. Cert et clé sont tous en un. J'ai essayé ce qui suit: openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key (extrait de cert) openssl s_client -cert cert.pem -key copyofcert.pem (Suite dans le commentaire suivant)
Tous ont donné la même erreur: <br> erreur lors de la définition de la clé privée <br> 8584: erreur: 0B080074: certificat x509 <br> routines: X509_check_private_key: valeurs de clé <br> Notez qu'il s'agit d'une erreur différente, puis au-dessus de l'inadéquation:. \ Crypto \ x509 \ x509_cmp.c: 399:
Vous confondez vos certificats et vos clés. Jusqu'à ce que vous le fassiez fonctionner avec openssl s_client, vous pouvez être sûr que vous passez le mauvais fichier (contenu) à wget. Regardez à l'intérieur des fichiers et voyez s'ils sont étiquetés (sont généralement avec quelque chose comme --- BEGIN PRIVATE KEY --- ou --- BEGIN RSA KEY --- ou --- BEGIN CERTIFICATE --- ... etc .. qui vous dira ce qu'il y a dans les fichiers)
Ram
2

J'ai utilisé wget avec succès comme ceci:

"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

Notez le --private-key option. retenue.url a https: //bla.bla.bla

Cependant, il m'invite maintenant avec "Entrez la phrase de passe PEM:".

Si j'entre le mot de passe, cela fonctionne bien, mais quelqu'un sait-il comment contourner l'invite?

Bart De Vos
la source
4
Créez une copie de la clé sans aucune phrase de passe: openssl rsa -in key.pem -out keyout.pem
pehrs
0

Est-il possible que wget se connecte au port 80? Cette erreur est très similaire aux erreurs que je reçois lors des tests lorsque j'ai accidentellement écouté HTTP 80 et 443-wget essayait de parler SSL et n'obtenait pas la réponse souhaitée.

Josh Budde
la source
Nan. L'URL est dans un script, elle est donc toujours la même. Et lorsque je teste avec l'authentification client désactivée, mais https activé, cela fonctionne.
0

Obtenez une capture réseau et chargez-la dans Wireshark. Cela devrait vous donner une image plus claire de ce qui échoue au niveau SSL / TLS.


la source
0

Il y a eu des problèmes avec SSLv3 dans des versions comme 0.9.8.

Essayez de passer -no_ticket à openssl s_client ou si -ssl2 fonctionne

artifex
la source