Wget, самозаверяющие сертификаты и собственный HTTPS-сервер
По разным причинам я создал простой HTTP-сервер и добавил поддержку SSL через OpenSSL. Я использую самозаверяющие сертификаты. IE, Firefox и Chrome загружают контент до тех пор, пока я добавляю CA в доверенные корневые центры сертификации.
Однако wget (даже при использовании флага --no-check-certificate
) сообщает:
OpenSSL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
Если я запустил клиент OpenSSL против моего сервера, используя:
openssl s_client -connect dnvista:82 -debug
Я возвращаюсь:
проверьте ошибку: num = 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);
Ответы
Ответ 1
Я проверил man-страницу wget
, а --no-check-certificate
только влияет на сертификат сервера. Вы должны указать свой самозаверяющий сертификат как действующий сертификат CA локально.
Чтобы сделать это, укажите сертификат как --ca-certificate=...
в wget
и -CAfile
в случае s_client
.
Ответ 2
Вы также можете установить доверенные корневые сертификаты CA в OpenSSL одним из нескольких способов: