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

8

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

Барт Де Вос
источник
Я сделал обходной путь: определите VirtualHost в Apache без аутентификации сертификата клиента, установите DocRoot на тот же каталог и установите Allow from на адрес localhost.

Ответы:

7

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

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

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
источник
вы сделали мой день!
Петр Буткович,
4

Вы уверены, что аутентификация сертификата клиента SSL работает на вашем сервере?

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

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

  1. не удалось предоставить мой ключевой файл: 400 неверных запросов
  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.

Джеймс Ф
источник
Я испробовал все ваши предложения: 1. Сертификат отлично работает в FF 3.5 2. Сервер: Apache 2.2.11, Openssl 0.9.8i, Клиент Windows Server 2003: WGET 1.11.4, OpenSSL 0.9.8k (бинарный), Win XP SP3 3 С другой машины: тот же результат 4. Я получил сертификат от Comodo. Сертификат и ключ все в одном. Я попробовал следующее: openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key (извлечено из cert) openssl s_client -cert cert.pem -key copyofcert.pem (продолжение в следующем комментарии)
Все выдали одну и ту же ошибку: <br> ошибка установки закрытого ключа <br> 8584: ошибка: 0B080074: сертификат x509 <br> подпрограммы: X509_check_private_key: значения ключа <br> Обратите внимание, что это другая ошибка, чем приведенная выше несоответствие:. \ Crypto \ x509 \ x509_cmp.c: 399:
Вы путаете свои сертификаты и ключи. Пока вы не включите его для работы с openssl s_client, вы можете быть уверены, что передаете неправильный файл (содержимое) в wget. Загляните внутрь файлов и посмотрите, не помечены ли они тегами (как правило, с чем-то вроде --- BEGIN PRIVATE KEY --- или --- BEGIN RSA KEY --- или --- BEGIN CERTIFICATE --- ... и т.д .. .это скажет вам, что в файлах)
Ram
2

Я успешно использовал 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. retain.url имеет https: //bla.bla.bla

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

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

Барт Де Вос
источник
4
Создайте копию ключа без какой-либо парольной фразы: openssl rsa -in key.pem -out keyout.pem
pehrs
0

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

Джош Бадд
источник
Нет. URL находится в скрипте, поэтому он всегда один и тот же. И когда я тестирую с клиентской аутентификацией, но https включен, это работает.
0

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


источник
0

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

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

Artifex
источник