2009-10-29 3 views
10

По различным причинам я создал простой HTTP-сервер и добавил поддержку SSL через OpenSSL. Я использую самозаверяющие сертификаты. IE, Firefox и Chrome счастливо загружают контент, пока я добавляю CA в доверенные корневые центры сертификации.wget, самозаверяющие сертификаты и собственный HTTPS-сервер

Однако Wget (даже при использовании --no-check-certificate флага) сообщает:

OpenSSL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure 

Если я запускаю клиент OpenSSL против моего сервера с помощью:

openssl s_client -connect dnvista:82 -debug 

я вернусь: проверить сообщение об ошибке: № 19: самоподписанный сертификат в цепочке сертификатов подтвердить возврат: 0 , а затем

5852:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:.\ssl\s3_pkt.c:1060:SSL alert number 40 
5852:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:.\ssl\s23_lib.c:188: 

Действительно ли wget и клиент OpenSSL просто не работают с самозаверяющими сертификатами?

UPDATE:

Для всех, кто приходит вместе позже, добавив этот код помог с клиентом OpenSSL и Firefox:

EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); 
SSL_CTX_set_tmp_ecdh(ctx, ecdh); 
EC_KEY_free(ecdh); 

ответ

11

Я проверил страницу человека из wget и --no-check-certificate только кажется, влияют на сертификат сервера . Вы должны указать свой самозаверяющий сертификат как действующий сертификат CA локально.

Для этого укажите сертификат как --ca-certificate=... в wget и -CAfile в s_client случае.

+5

Hi. Я видел много таких комментариев, таких как «Turn off-off» в количестве слов. Это действительно идея _BAD_ **. Немного похоже на уличные гонки с лысыми шинами на мокрой дороге. Я разочарован, что этот ответ получил отметку «tick». – will

+5

будет: я согласен, поворот проверки, как правило, плохая идея. Мой ответ предлагает один способ сделать сертификат CA известным клиенту, так что проверка может быть выполнена правильно. –

5

Вы также можете установить доверенных сертификатов корневого центра сертификации в OpenSSL в одном из нескольких способов:

  • Поместите свой сертификат CA в/и т.д./ПКИ/TLS/сертификаты или эквивалентный каталог, а затем создать ссылку на основе на хэш сертификата. См. http://gagravarr.org/writing/openssl-certs/others.shtml#ca-openssl.
  • Добавьте сертификат CA в /etc/pki/tls/certs/ca-bundle.crt, /etc/pki/tls/cert.pem или эквивалентный пакет CA.
+0

Я разместил вопрос: [Ruby OpenSSL Настройка или настройка для вашего кода приложения] (http://stackoverflow.com/questions/5233169/ruby-openssl-set-up-or-configuration-for-your-application- код), чтобы спросить _HOW_ Ruby получает ресурсы PEM или CRT для проверки хоста. Я исчерпывающе искал модуль, который загружает информацию об окружающей среде или конфигурации с помощью рекурсивных ** grep ** сканирует - не повезло (кроме тестов и образцов). – will

Смежные вопросы