В общем-то
Я хочу иметь возможность установить HTTPS-соединение с сайтом, и во время согласования SSL проверить, что:
Сертификат во всех отношениях действителен для хоста, указанного в сертификате (не истек, подписан доверенным центром сертификации), и
Сертификат предназначен для хоста, который я указываю (т.е. я могу подключаться через HTTPS к example1.com, но я просто хочу убедиться, что сертификат, используемый example1.com, действителен для example4.com, потому что я доверяю example4.com. скомпрометированы).
конкретно
Есть сайт, связанный с redhat, который использует сертификат, действительный для * .redhat.com, но не принадлежит домену redhat.com. В любом другом случае этот сертификат действителен (т. Е. Он выдан доверенным центром сертификации, срок его действия не истек, и я на 99,99% уверен, что он не украден - хотя, если бы это было так, это означало бы, что redhat был взломан, поэтому У меня были бы большие проблемы), и я хочу загрузить модуль RPM с этого сайта, в то же время (надеюсь) гарантируя, что я не был MITM.
Итак, я хочу скачать что-то с сайта redhat-affiliated example.com, проверяя, действительно ли на сайте, к которому я подключаюсь, используется действующий сертификат redhat.
Вещи, которые я уже пробовал:
curl
- ближе всего к этой функциональности есть флаг этой опции, который просто отключает аутентификацию всех сертификатов, а это не то, что мне нужно, и
wget
- просто имеет опцию --no-check-certificate
аргументов, что также бесполезно.
Согласно документации на libcurl, я мог бы использовать это, что выглядит многообещающе, но упоминает, что это требует от меня «... нетривиального объема знаний о библиотеках openssl», которым я, очевидно, не обладаю. Я могу программировать на C или Python или что-то еще, хотя, что было бы наиболее полезно (в порядке убывания предпочтений):
- решение bash / sh, использующее только приложения командной строки, которые обычно поставляются с дистрибутивами на основе RHEL,
- или решение с использованием обычного скриптового языка (Python, Perl, Ruby и т. д.) без библиотечных зависимостей, требующих загрузки,
- или решение, использующее язык без кода (C / C++, Java, Haskell и т. д.), которое опять же не требует каких-либо загрузок библиотеки.