Menggunakan sertifikat klien dengan wget

8

Saya tidak bisa mendapatkan wget untuk menggunakan sertifikat klien. Dokumentasi berbicara tentang menggunakan bendera - sertifikat.

Penggunaan flag sertifikat jelas, saya mengaturnya untuk menggunakan versi PEM dari sertifikat klien.

Tetapi ketika saya terhubung saya mendapatkan kesalahan berikut:

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.

ssl handshake failure berarti klien tidak menyediakan sertifikat klien yang benar. Masih sertifikat klien yang saya gunakan, berfungsi di browser.

Catatan: Saat saya menonaktifkan otentikasi klien di server, wget dapat terhubung. Catatan: Penggunaan curl disarankan, tetapi saya ingin menghindari sakelar.

Bart De Vos
sumber
Saya membuat solusi: Tentukan VirtualHost di Apache tanpa otentikasi sertifikat klien, atur DocRoot ke dir yang sama dan atur Allow from ke alamat localhost.

Jawaban:

7

Saya belajar satu minggu tentang ini, akhirnya dengan bantuan yang saya dapatkan dari halaman ini.

Perintah yang saya gunakan untuk menghubungkan adalah:

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
sumber
kamu membuat hariku!
Peter Butkovic
4

Apakah Anda yakin bahwa otentikasi sertifikat klien SSL berfungsi terhadap server Anda?

Saya baru saja menguji bahwa saya dapat mengambil sertifikat saya (dalam format PKCS12), mengubahnya menjadi sertifikat dan file kunci dalam format PEM dan menggunakannya dengan wget baik-baik saja.

Saya dapat memprovokasi tiga kondisi kesalahan, tidak ada yang cocok dengan yang Anda laporkan:

  1. gagal memberikan file kunci saya: 400 Permintaan Buruk
  2. memberikan kunci yang buruk: EVP_DecryptFinal_ex: dekripsi buruk dari OpenSSL
  3. memberikan sertifikat yang valid bahwa server tidak suka: 403 dilarang

Saya menggunakan nginx; Anda tidak menyebutkan apa yang Anda gunakan, jadi saya tidak yakin apakah Apache akan mengembalikan respons yang sama.

Saya sarankan mengambil sertifikat dan kunci Anda, menggabungkannya ke PKCS12 (atau hanya mengimpornya sebagai PEM jika browser Anda mendukung format) dan memastikan bahwa semuanya bekerja di depan itu terlebih dahulu.

Jika Anda sudah melakukannya, mungkin Anda dapat mencoba dari komputer lain untuk memastikan bahwa itu bukan sesuatu yang aneh dengan versi OpenSSL yang Anda gunakan.

Terakhir, coba gunakan OpenSSL dalam mode s_client:

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

Dan lihat apakah semuanya bekerja pada level itu. Jika demikian, maka ada sesuatu yang tidak beres dengan wget dan Anda mungkin ingin membangun kembali atau menginstalnya kembali. Jika tidak, tingkat output debug dapat membantu Anda menentukan masalah lebih dari yang akan di-debug output wget.

James F
sumber
Saya mencoba semua saran Anda: 1. Cert berfungsi dengan baik di FF 3.5 2. Server: Apache 2.2.11, openssl 0.9.8i, Klien Windows Server 2003: WGET 1.11.4, OpenSSL 0.9.8k (biner), Win XP SP3 3 Dari mesin lain: hasil yang sama 4. Saya menerima sertifikat dari Comodo. Sertifikat dan kunci semuanya dalam satu. Saya mencoba yang berikut ini: openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key (diekstrak dari cert) openssl s_client -cert cert.pem -key copyofcert.pem (Lanjutan di komentar berikutnya)
Semua memberikan kesalahan yang sama: <br> kesalahan pengaturan kunci pribadi <br> 8584: kesalahan: 0B080074: sertifikat x509 <br> rutinitas: X509_check_private_key: nilai kunci <br> Perhatikan bahwa ini adalah kesalahan yang berbeda dan di atas ketidakcocokan di atas:. \ Crypto \ x509 \ x509_cmp.c: 399:
Anda membingungkan sertifikat dan kunci Anda. Sampai Anda membuatnya berfungsi dengan openssl s_client Anda dapat yakin Anda melewati file (konten) yang salah untuk wget. Lihat ke dalam file dan lihat apakah mereka ditandai (biasanya dengan sesuatu seperti --- BEGIN PRIVATE KEY --- atau --- BEGIN RSA KEY --- atau --- BEGIN CERTIFICATE --- ... dll .. .that akan memberi tahu Anda apa yang ada di file)
Ram
2

Saya telah berhasil menggunakan wget seperti ini:

"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

Perhatikan --private-key option. retain.url memiliki https: //bla.bla.bla

Namun, sekarang meminta saya dengan "Masukkan frase pass PEM:".

Jika saya memasukkan kata sandi itu berfungsi baik, tetapi apakah ada yang tahu cara di sekitar prompt?

Bart De Vos
sumber
4
Buat salinan kunci tanpa frasa sandi apa pun: openssl rsa -in key.pem -out keyout.pem
pehrs
0

Apakah mungkin wget terhubung ke port 80? Kesalahan itu sangat mirip dengan kesalahan yang saya terima dalam pengujian ketika saya secara tidak sengaja mendengarkan HTTP ke 80 dan 443-wget mencoba berbicara SSL dan tidak mendapatkan respons yang diinginkan.

Josh Budde
sumber
Nggak. URL ada dalam skrip, jadi selalu sama. Dan ketika saya menguji dengan klien auth off, tetapi https aktif, itu berfungsi.
0

Dapatkan tangkapan jaringan dan muat di Wireshark. Ini akan memberi Anda gambaran yang lebih jelas tentang apa yang gagal di tingkat SSL / TLS.


sumber
0

Ada masalah dengan SSLv3 dalam versi seperti 0.9.8.

Coba lewat -no_ticket ke openssl s_client atau jika -ssl2 berfungsi

artifex
sumber