Utilizzo dei certificati client con wget


8

Non riesco a ottenere wget per usare i certificati client. La documentazione parla dell'uso della bandiera --certificate.

L'uso del flag di certificato è chiaro, l'ho impostato per utilizzare la versione PEM del certificato client.

Ma quando mi connetto ottengo il seguente errore:

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.

errore di handshake ssl significa che il client non ha fornito un certificato client corretto. Comunque il client cert che uso, funziona in un browser.

Nota: quando disabilito l'autenticazione client sul server, wget può connettersi. Nota: si consiglia l'uso del ricciolo, ma vorrei evitare il passaggio.


Ho risolto il problema: definire un VirtualHost in Apache senza autenticazione del certificato client, impostare DocRoot sulla stessa directory e impostare Consenti dall'indirizzo localhost.

Risposte:


7

Ho studiato una settimana su questo, finalmente con l'aiuto che ho ricevuto da questa pagina.

Il comando che ho usato per connettermi è:

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

mi hai reso felice!
Peter Butkovic,

4

Sei sicuro che l'autenticazione del certificato client SSL funzioni sul tuo server?

Ho appena provato che posso prendere il mio certificato (in formato PKCS12), convertirlo in un file cert e chiave in formato PEM e usarlo con wget bene.

Posso provocare tre condizioni di errore, nessuna delle quali corrisponde a ciò che stai segnalando:

  1. non riesco a fornire il mio file chiave: 400 Bad Request
  2. fornendo una chiave errata: EVP_DecryptFinal_ex: decrittografia errata da OpenSSL
  3. fornendo un certificato valido che al server non piace: 403 vietato

Sto usando nginx; non dici cosa stai usando, quindi non sono sicuro che Apache restituirebbe le stesse risposte.

Suggerirei di prendere il tuo certificato e chiave, combinandolo in PKCS12 (o semplicemente importandolo come PEM se il tuo browser supporta il formato) e assicurandoti che tutto funzioni prima su quel fronte.

Se l'hai già fatto, forse puoi provare da un'altra macchina per assicurarti che non sia qualcosa di strano con la versione di OpenSSL che stai utilizzando.

Infine, prova a utilizzare OpenSSL in modalità s_client:

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

E vedi se le cose funzionano a quel livello. Se è così, allora qualcosa è instabile con wget e potresti voler ricostruire o reinstallarlo. In caso contrario, il livello dell'output di debug può aiutarti a individuare il problema più dell'output di debug di wget.


Ho provato tutti i tuoi suggerimenti: 1. Cert funziona bene in FF 3.5 2. Server: Apache 2.2.11, Openssl 0.9.8i, client Windows Server 2003: WGET 1.11.4, OpenSSL 0.9.8k (binario), Win XP SP3 3 Dall'altra macchina: stesso risultato 4. Ho ricevuto il certificato da Comodo. Cert e chiave sono tutti in uno. Ho provato quanto segue: openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key (estratto da cert) openssl s_client -cert cert.pem -key copyofcert.pem (Continua nel prossimo commento)

Tutti hanno dato lo stesso errore: <br> errore nell'impostazione della chiave privata <br> 8584: errore: 0B080074: certificato x509 <br> routine: X509_check_private_key: valori chiave <br> Si noti che si tratta di un errore diverso rispetto alla mancata corrispondenza:. \ Crypto \ x509 \ x509_cmp.c: 399:

Stai confondendo le tue certs e le chiavi. Fino a quando non riuscirai a farlo funzionare con openssl s_client puoi essere sicuro di aver passato il file (contenuto) sbagliato per wget. Guarda all'interno dei file e vedi se sono taggati (di solito hanno qualcosa come --- INIZIA TASTO PRIVATO --- o --- INIZIA TASTO RSA --- o --- INIZIA CERTIFICATO --- ... ecc. .che ti dirà cosa c'è nei file)
Ram

2

Ho usato con successo wget in questo modo:

"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

Nota il --private-key option. retain.url ha https: //bla.bla.bla

Tuttavia, ora viene visualizzato il messaggio "Inserisci frase di accesso PEM:".

Se inserisco la password funziona bene, ma qualcuno conosce un modo per aggirare il prompt?


4
Crea una copia della chiave senza alcuna passphrase: openssl rsa -in key.pem -out keyout.pem
pehrs

0

È possibile che wget si stia collegando alla porta 80? Quell'errore è molto simile agli errori che ricevo durante i test quando accidentalmente ho avuto l'ascolto HTTP 80 e 443-wget stava provando a parlare SSL e non ottenendo la risposta che voleva.


No. L'URL è in uno script, quindi è sempre lo stesso. E quando provo con l'autenticazione del client disattivata, ma https attivato, funziona.

0

Ottieni un'acquisizione di rete e caricala in Wireshark. Questo dovrebbe darti un quadro più chiaro di ciò che non funziona a livello di SSL / TLS.


0

Ci sono stati problemi con SSLv3 in versioni come 0.9.8.

Prova a passare -no_ticket a openssl s_client o se -ssl2 funziona

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.