Я не могу заставить 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.
Я могу вызвать три состояния ошибки, ни одно из которых не соответствует тому, о чем вы сообщаете:
Я использую 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 работает