Добрый день,Столкнулся со странной проблемой. Поднял stunnel на внешний сайт. Пробую кинуть на него POST напрямую, всё отрабатывает корректно.:
curl https://site.com/site -X POST -d '{data}' --cacert /etc/stunnel/certs/root-ca.crt --key /etc/stunnel/client.key --cert /etc/stunnel/certs/client.crt
Пробую через stunnel, получаю ошибку:
curl http://127.0.0.1:1919/site -X POST -d '{data}'Причём если я правильно понимаю, то это ошибка уровня приложения, а не уровня SSL:
<html> <head> <title>Invalid Cert</title> </head>CN=heresCN,OU=heresOU,O=HeresO,C=US is not valid on this url</html>
Собственно, в чём вопрос. В чём может быть разница между SSL соединением которое иницирует cURL и соединением, которое делает stunnel? Они же должны идентично отрабатывать? В какую сторону копать?
####################################
debug = 7
output = /var/log/stunnel/stunnel.log
setuid = nobody
setgid = nobody
pid = /tmp/stunnel.pid[tun]
client = yes
accept = 1919
connect = site.com:443#options = NO_SSLv2
#options = NO_SSLv3
sslVersion = TLSv1.2
ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256CAfile = /etc/stunnel/certs/root-ca.crt
cert = /etc/stunnel/certs/client.crt
key = /etc/stunnel/client.key
#########################
> Причём если я правильно понимаю, то это ошибка уровня приложения, а не
> уровня SSL:
> <html> <head> <title>Invalid Cert</title> </head>CN=heresCN,OU=heresOU,O=HeresO,C=US
> is not valid on this url</html>Если это приехало в качестве контента для cURL, значит клиент и сервер договорились о HTTP, значит у них получилось SSL. Код ответа, случайно, не 403? По смыслу содержимого, похоже на творчески выраженную ошибку аутентикации по сертификату.
> Собственно, в чём вопрос. В чём может быть разница между SSL соединением
> которое иницирует cURL и соединением, которое делает stunnel? Они же должны
> идентично отрабатывать?Либо cURL втихаря какие-то свои хедеры прицепляет когда HTTPS, либо сервер... уж не знаю что он может насамодельничать.
> В какую сторону копать?
Надо бы посмотреть в лог веб сервера и в лог приложения.
Ещё может помочь сделать дамп переменных окружения на сервере, либо посмотреть на хедеры, как запроса так и ответа (--verbose в помощь), в случае HTTPS напрямую и в случае stunnel.Это обшие соображения, сам я на такое поведение не напарывался. Мы, обычно, вместо stunnel сразу обратный прокси на Nginx пихаем. Оверкилл, но ни разу не было чтоб критично по ресурсам оказывалось. С другой стороны, "мы" это инфраструктура, аутентикация на уровне приложения, даже по сертификату, проходит мимо.
> Они же должны идентично отрабатывать? В какую сторону копать?в сторону http header'a "Host"
Сдаётся, что вы заголовок Host не задали. А может и sni в конфиге stunnel (но это не точно) и виртуальный сервер не может понять на какой сайт вы ломитесь.