Назад | Перейти на главную страницу

Использование клиентских сертификатов с wget

Я не могу заставить wget использовать клиентские сертификаты. В документации говорится об использовании флага --certificate.

Использование флага сертификата понятно, я установил его на использование PEM-версии клиентского сертификата.

Но когда я подключаюсь, я получаю следующую ошибку:

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 означает, что клиент не предоставил правильный сертификат клиента. Тем не менее, клиентский сертификат, который я использую, работает в браузере.

Примечание. Когда я отключаю аутентификацию клиента на сервере, wget может подключиться. Примечание. Рекомендуется использовать curl, но я бы не хотел использовать переключатель.

Я изучал это неделю, в конце концов, с помощью, которую я получил с этой страницы.

Команда, которую я использовал для подключения:

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

Вы уверены, что проверка подлинности сертификата клиента SSL работает против вашего сервера?

Я только что проверил, могу ли я взять свой сертификат (в формате PKCS12), преобразовать его в файл сертификата и ключа в формате PEM и использовать его с wget.

Я могу вызвать три состояния ошибки, ни одно из которых не соответствует тому, о чем вы сообщаете:

  1. не предоставить мой ключевой файл: 400 Bad Request
  2. предоставление плохого ключа: EVP_DecryptFinal_ex: плохая расшифровка из OpenSSL
  3. предоставление действительного сертификата, который не нравится серверу: 403 запрещено

Я использую nginx; вы не упоминаете, что используете, поэтому я не уверен, что Apache вернет такие же ответы.

Я бы посоветовал взять ваш сертификат и ключ, объединить его в PKCS12 (или просто импортировать его как PEM, если ваш браузер поддерживает формат) и сначала убедиться, что все работает на этом фронте.

Если вы уже сделали это, возможно, вы можете попробовать с другой машины, чтобы убедиться, что это не что-то странное с используемой версией OpenSSL.

Наконец, попробуйте использовать OpenSSL в режиме s_client:

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

И посмотрите, работают ли все на этом уровне. Если это так, то с wget что-то не так, и вы, возможно, захотите пересобрать или переустановить его. В противном случае уровень вывода отладки может помочь вам определить проблему больше, чем вывод отладки wget.

Я успешно использовал wget вот так:

"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

Обратите внимание --private-key option. keep.url имеет https: //bla.bla.bla

Однако теперь он предлагает мне «Введите парольную фразу PEM:».

Если я ввожу пароль, он работает нормально, но кто-нибудь знает способ обойти подсказку?

Возможно ли, что wget подключается к порту 80? Эта ошибка очень похожа на ошибки, которые я получаю при тестировании, когда я случайно получил HTTP, прослушивающий 80, и 443-wget пытался разговаривать по SSL и не получал желаемого ответа.

Получите сетевой захват и загрузите его в Wireshark. Это должно дать вам более четкое представление о том, что не удается на уровне SSL / TLS.

В версиях вроде 0.9.8 были проблемы с SSLv3.

Попробуйте передать -no_ticket в openssl s_client или если -ssl2 работает