Re: Nginx + Android + ssl = 400

2015-03-04 Пенетрантность Maxim Dounin
Hello!

On Wed, Mar 04, 2015 at 10:38:25AM -0500, ingtar wrote:

 тут то собака и порылась.
 Я вижу записи в логах правильного конфига, где бы он не был. Т.е. запрос
 попадает на правильное server_name.

Запрос - попадает в нужный server{} на основании заголовка Host 
HTTP-запроса.  При этом если клиент не умеет SNI - _соединение_ 
будет установлено в рамках сервера по умолчанию, и соответственно 
настройки SSL будут те, которые указаны в рамках сервера по 
умолчанию.

-- 
Maxim Dounin
http://nginx.org/

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-04 Пенетрантность ingtar
тут то собака и порылась.
Я вижу записи в логах правильного конфига, где бы он не был. Т.е. запрос
попадает на правильное server_name.

Gena Makhomed Wrote:

 Скорее всего, HTTP-клиент на андроиде не умеет TLS SNI
 и поэтому его запросы всегда попадают в default_server.
 
 -- 
 Best regards,
   Gena
 
 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,257050#msg-257050

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-03 Пенетрантность Aleksandr Sytar
3 марта 2015 г., 20:30 пользователь ingtar nginx-fo...@nginx.us написал:

 Тогда я ничего не понимаю :) Можно я вам расскажу свое понимание работы
 nginx, а вы меня поправите? Может быть у меня фундаментальная дара в
 знаниях, я такое не отрицаю :)

 Есть два файла конфигов в директории conf.d

 example1.conf
 server {
 listen *:80;
 listen *:443 ssl;
 server_name example1;
 ssl_certificate 1.crt;
 ssl_certificate_key 1.key;
 }

 example2.conf
 server {
 listen *:80;
 listen *:443 ssl;
 server_name example2;
 ssl_certificate 1.crt;
 ssl_certificate_key 1.key;
 ssl_client_certificate ca.crt;
 ssl_verify_client on;
 }

 Клиент устанавливает с сайтом example1 соединение. Запрос с хэдером этого
 сайта приходит на сервер, обслуживающий указанный ИП адрес (Client Helo).
 Nginx принял запрос, по хедеру сравнил server_name и стал обрабатывать этот
 запрос по правилам конфига example1 (т.к listen равноправные, приоритет
 отдается конфигу с правильынм server_name) Сервер отправляет свое Helo с
 открытым ключем, клиент его проверяет и если все ок - оба договариваются об
 алгоритмах шифрования и начинается обмен данными.

 Это если без особых подробностей.
 Для конфига example2 все тоже самое, только сервер запрашивает сертификат
 клиента и если его нет - 400 ошибка.


 В итоге у меня получается два сайта - первый работает без клиентских
 сертификатов, второй с ними..


и вся эта магия ломается если клиент не передал заголовок Host
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-03 Пенетрантность ingtar
Вооо! Я могу, указав в каждом из конфигов свои access_log, видеть, каким
конфигом чей запрос словился.
И я вижу, что запрос от клиента с андройда и сертификатом словился
правильным конфигом (т.е. заголовок был отправлен), он упал в нужный лог. Но
если конфиг не в топе - то там 400, а если в топе - то 200!
Причем еррор лог говорит просто - запрос без сертификата, а если в топе
конфиг - то с сертификатом :)

Aleksandr Sytar Wrote:
---

 и вся эта магия ломается если клиент не передал заголовок Host

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,257037#msg-257037

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-03 Пенетрантность Gena Makhomed

On 03.03.2015 19:30, ingtar wrote:


Клиент устанавливает с сайтом example1 соединение. Запрос с хэдером этого
сайта приходит на сервер, обслуживающий указанный ИП адрес (Client Helo).
Nginx принял запрос, по хедеру сравнил server_name и стал обрабатывать этот
запрос по правилам конфига example1 (т.к listen равноправные, приоритет
отдается конфигу с правильынм server_name) Сервер отправляет свое Helo с
открытым ключем, клиент его проверяет и если все ок - оба договариваются об
алгоритмах шифрования и начинается обмен данными.


listen не равноправные. один из них - default_server. Подробнее:
http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
http://nginx.org/ru/docs/http/ngx_http_core_module.html#listen

Выбор HTTPS-сервера для обработки происходит не по заголовку Host:
http://nginx.org/en/docs/http/configuring_https_servers.html
http://nginx.org/ru/docs/http/configuring_https_servers.html


Если я вас достал глупыми вопросами - извините, я хочу разобраться в
проблеме.


http://mailman.nginx.org/pipermail/nginx-ru/2015-March/055479.html


По поводу своего первоначального вопроса - выставили конфиг первым в списке,
что неправильно, но работает :)


Скорее всего, HTTP-клиент на андроиде не умеет TLS SNI
и поэтому его запросы всегда попадают в default_server.

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-03 Пенетрантность ingtar
Тогда я ничего не понимаю :) Можно я вам расскажу свое понимание работы
nginx, а вы меня поправите? Может быть у меня фундаментальная дара в
знаниях, я такое не отрицаю :)

Есть два файла конфигов в директории conf.d

example1.conf
server { 
listen *:80;
listen *:443 ssl;
server_name example1;
ssl_certificate 1.crt;
ssl_certificate_key 1.key;
}

example2.conf
server { 
listen *:80;
listen *:443 ssl;
server_name example2;
ssl_certificate 1.crt;
ssl_certificate_key 1.key;
ssl_client_certificate ca.crt;
ssl_verify_client on;
}

Клиент устанавливает с сайтом example1 соединение. Запрос с хэдером этого
сайта приходит на сервер, обслуживающий указанный ИП адрес (Client Helo).
Nginx принял запрос, по хедеру сравнил server_name и стал обрабатывать этот
запрос по правилам конфига example1 (т.к listen равноправные, приоритет
отдается конфигу с правильынм server_name) Сервер отправляет свое Helo с
открытым ключем, клиент его проверяет и если все ок - оба договариваются об
алгоритмах шифрования и начинается обмен данными.

Это если без особых подробностей.
Для конфига example2 все тоже самое, только сервер запрашивает сертификат
клиента и если его нет - 400 ошибка.

В итоге у меня получается два сайта - первый работает без клиентских
сертификатов, второй с ними.. 
Если я вас достал глупыми вопросами - извините, я хочу разобраться в
проблеме. 

По поводу своего первоначального вопроса - выставили конфиг первым в списке,
что неправильно, но работает :)


Илья Шипицин Wrote:
---
 нельзя настроить только один сайт требует аутентификацию по
 сертификату
 этот параметр согласуется в SSL Server Hello. т.е. вы требуете
 аутентификацию для всех сайтов.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,257035#msg-257035

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-02 Пенетрантность Maxim Dounin
Hello!

On Sun, Mar 01, 2015 at 02:43:53AM -0500, ingtar wrote:

 В общем, ситуация все страннее и страннее. Я скопировал полностью все
 конфиги с боевого сервера (много доменных имен) - и у меня на тесте все
 отвалилось!
 В результате гоняний конфигов туда-сюда выяснил, что если конфиг для
 exchange стоит ПЕРВЫМ в списке директории - т.е. имеет например имя
 a.conf то все работает.

Судя по всему, вам надо прочитать про то, как вообще работает SSL 
и как [не] решается проблема нескольких сертификатов на одном 
сервере.  Ибо вы, судя по всему, пытаетесь использовать SNI.  
Делая это, надо понимать, что:

1) SNI работает далеко не везде, даже не во всех браузерах.  Не 
говоря уже о каких-либо специфических http-клиентах.

2) Если SNI не работает, то будет использован сертификат из 
сервера по умолчанию.  Каковым является первый в конфиге блок 
server{}, использующий данный listen-сокет (либо может быть задан 
явно с помощью параметра default_server директивы listen).

Подробнее про SNI можно почитать, например, тут:

http://nginx.org/ru/docs/http/configuring_https_servers.html#name_based_https_servers

А про сервера по умолчанию - тут:

http://nginx.org/ru/docs/http/request_processing.html

-- 
Maxim Dounin
http://nginx.org/

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-02 Пенетрантность ingtar
Доброго дня, Максим!

Maxim Dounin Wrote:
---

Такую штуку я специально не включал, только по незнанию если :) Но поддержка
SNI есть, nginx -V ее показывает.
 
 Ибо вы, судя по всему, пытаетесь использовать SNI.  
 Делая это, надо понимать, что:
 
 1) SNI работает далеко не везде, даже не во всех браузерах.  Не 
 говоря уже о каких-либо специфических http-клиентах.
 
 2) Если SNI не работает, то будет использован сертификат из 
 сервера по умолчанию.  Каковым является первый в конфиге блок 
 server{}, использующий данный listen-сокет (либо может быть задан 
 явно с помощью параметра default_server директивы listen).
 
 На сервере установлен один wildcard-сертификат, который используется для
всех доменных имен. В том числе в конфиге для Exchange. Вторых сертификатов
для ssl нет. Соотвесттвенно доменные адреса вида www.example.com,
static.example.com, zip.example.com и теперь вот exchange.example.com
Только 1 конфиг использует авторизацию клиентов по сертификатам, все
остальные это обычные веб-сайты с общим доступом.

За ссылки спасибо :)
В общем я подозреваю, что клиент Андройда делает один из запросов  при
установке соединения не по хостнейму, а по ИП адресу (может быть обратную
зону проверяет, но не получилось это подтвердить) В результате запрос
цепляется правильным конфигом, но вот на тот самый обратный запрос нам
отвечает другой конфиг (первый в списке)

Самое, что заставляет мой глаз дергаться - на IOS все работает как часы при
любой конфигурации.

 Подробнее про SNI можно почитать, например, тут:
 
 http://nginx.org/ru/docs/http/configuring_https_servers.html#name_base
 d_https_servers
 
 А про сервера по умолчанию - тут:
 
 http://nginx.org/ru/docs/http/request_processing.html
 
 -- 
 Maxim Dounin
 http://nginx.org/
 
 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256998#msg-256998

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-03-02 Пенетрантность Илья Шипицин
нельзя настроить только один сайт требует аутентификацию по сертификату
этот параметр согласуется в SSL Server Hello. т.е. вы требуете
аутентификацию для всех сайтов.
можете поиграть с обработчиком ошибки 495 (клиент не предоставил
сертификата), в сеть пойдет 400 (в error-логе будет 495), вероятно это
ваш случай.

насчет pre-flight запросов, в протоколе mapi есть механизм
автоопределения, не исключено, что этот запрос пытается выполнить
андроид.

чудесов не бывает, смотрите логи. там все есть про вашу 400-ю ошибку

2 марта 2015 г., 21:23 пользователь ingtar nginx-fo...@nginx.us написал:
 Доброго дня, Максим!

 Maxim Dounin Wrote:
 ---

 Такую штуку я специально не включал, только по незнанию если :) Но поддержка
 SNI есть, nginx -V ее показывает.

 Ибо вы, судя по всему, пытаетесь использовать SNI.
 Делая это, надо понимать, что:

 1) SNI работает далеко не везде, даже не во всех браузерах.  Не
 говоря уже о каких-либо специфических http-клиентах.

 2) Если SNI не работает, то будет использован сертификат из
 сервера по умолчанию.  Каковым является первый в конфиге блок
 server{}, использующий данный listen-сокет (либо может быть задан
 явно с помощью параметра default_server директивы listen).

  На сервере установлен один wildcard-сертификат, который используется для
 всех доменных имен. В том числе в конфиге для Exchange. Вторых сертификатов
 для ssl нет. Соотвесттвенно доменные адреса вида www.example.com,
 static.example.com, zip.example.com и теперь вот exchange.example.com
 Только 1 конфиг использует авторизацию клиентов по сертификатам, все
 остальные это обычные веб-сайты с общим доступом.

 За ссылки спасибо :)
 В общем я подозреваю, что клиент Андройда делает один из запросов  при
 установке соединения не по хостнейму, а по ИП адресу (может быть обратную
 зону проверяет, но не получилось это подтвердить) В результате запрос
 цепляется правильным конфигом, но вот на тот самый обратный запрос нам
 отвечает другой конфиг (первый в списке)

 Самое, что заставляет мой глаз дергаться - на IOS все работает как часы при
 любой конфигурации.

 Подробнее про SNI можно почитать, например, тут:

 http://nginx.org/ru/docs/http/configuring_https_servers.html#name_base
 d_https_servers

 А про сервера по умолчанию - тут:

 http://nginx.org/ru/docs/http/request_processing.html

 --
 Maxim Dounin
 http://nginx.org/

 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru

 Posted at Nginx Forum: 
 http://forum.nginx.org/read.php?21,256951,256998#msg-256998

 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
Доброго дня! Столкнулся с непонятной проблемой, не могу даже локализовать.
Настраиваем на фронте доступ к сайту по ssl сертификатам (Публикуем Exchange
и как фронтенд - nginx)
Соответственно доступ с мобильных устройств идет на локейшен
Microsoft-Server-ActiveSync. Сгенерировали CA, клиенский сертификат и
установили его на Андроид и на iPad. На втором работает, на первом дает
ошибку 400 - обращение без сертификата.
Как смог повторил состав ПО на тестовом фронте - работает и на Андройде. 
Причем что необычно - запросы от андройда на проблемном фронте падают не в
лог для этого локейшена , а в основной лог для этого сайта (падают в
exchange.example.com_main_access.log, а не в
exchange.example.com_sync_access.log, листинг конфига ниже)
Доступ через web - локейшен owa работает без замечаний и корректно на всех
устройствах
Все указывает на проблему софта, но я теряюсь в догадках, кто может мне
помочь. Решил попытать счастья тут:)
Если вдруг вы сталкивались с чем-то подобным - помогите, пожалуйста.

Версия nginx:
nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
--with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_stub_status_module
--with-http_auth_request_module --with-file-aio --add-module=ngx_devel_kit
--add-module=set-misc-nginx-module --add-module=echo-nginx-module
--with-http_spdy_module --with-cc-opt='-O2 -g'

CentOS release 6.3
openssl-1.0.1e-30.el6_6.5.x86_64

Конфиг nginx для данного сайта:
server 
{
   listen :80;
   server_nameexchange.example.com;
   return 301 https://$server_name$request_uri;
}

server
{
server_name exchange.example.com;
listen *:443 ssl;

ssl on;
   ssl_certificate /etc/pki/tls/certs/example.com_full.crt;
   ssl_certificate_key /etc/pki/tls/example.com.key;


ssl_protocolsSSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers  ALL;
ssl_client_certificate /etc/nginx/exchange_ssl/ssl/ca.crt;
ssl_verify_client on;

keepalive_timeout 70;
fastcgi_param SSL_VERIFIED $ssl_client_verify;
fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
fastcgi_param SSL_DN $ssl_client_s_dn;

# Set global proxy settings
proxy_read_timeout  360;
proxy_connect_timeout   360; 
proxy_pass_header   Date;
proxy_pass_header   Server;
 
proxy_set_headerHost $host;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerAccept-Encoding ;
 
proxy_buffers 8 32k;
proxy_buffer_size 64k;
large_client_header_buffers 8 32k;

location / {
   return 301 https://$server_name/owa;
proxy_buffer_size 32k;
}

location ~* ^/owa { 
   proxy_buffer_size 32k;
   error_log /var/log/nginx/exchange.example.com_owa_error.log
;
   access_log /var/log/nginx/exchange.example.com_owa_access.log
exchange;
   proxy_pass https://exchange; 
}

location ~* ^/Microsoft-Server-ActiveSync(.*) { 
proxy_buffer_size 32k;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;

error_log /var/log/nginx/exchange.example.com_sync_error.log ;
access_log /var/log/nginx/exchange.example.com_sync_access.log
exchange;
proxy_pass https://exchange;
}


error_log /var/log/nginx/exchange.example.com_main_error.log ;
access_log /var/log/nginx/exchange.example.com_main_access.log
exchange;

}

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256951#msg-256951

___
nginx-ru mailing list
nginx-ru@nginx.org

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
Andrey Kopeyko Wrote:
---

 По-видимому, вы не попадаете в описывающую location регулярку - 
 смотрите в логе куда именно он ломится, и корректируйте regexp.


Спасибо, попробую покрутить локейшен.
На момент ошибки в логах вот такой запрос:

exchange.example.com 111.111.11.111 - u...@example.com [28/Feb/2015:17:36:19
+0300] OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1 400 246 -
Android/5.0.2-EAS-2.0 - upstream - status:- time: -NONE - -
Смущает то, что на iOS все работает и этот же же конфиг на другом сервере
тоже работает.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256954#msg-256954

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность Andrey Kopeyko

28.02.2015 12:10, ingtar пишет:

Доброго дня! Столкнулся с непонятной проблемой, не могу даже локализовать.
Настраиваем на фронте доступ к сайту по ssl сертификатам (Публикуем Exchange
и как фронтенд - nginx)
Соответственно доступ с мобильных устройств идет на локейшен
Microsoft-Server-ActiveSync. Сгенерировали CA, клиенский сертификат и
установили его на Андроид и на iPad. На втором работает, на первом дает
ошибку 400 - обращение без сертификата.
Как смог повторил состав ПО на тестовом фронте - работает и на Андройде.
Причем что необычно - запросы от андройда на проблемном фронте падают не в
лог для этого локейшена , а в основной лог для этого сайта (падают в
exchange.example.com_main_access.log, а не в
exchange.example.com_sync_access.log, листинг конфига ниже)


По-видимому, вы не попадаете в описывающую location регулярку - 
смотрите в логе куда именно он ломится, и корректируйте regexp.


...


 location ~* ^/Microsoft-Server-ActiveSync(.*) {
proxy_buffer_size 32k;







--
Best regards,
Andrey Kopeyko and...@kopeyko.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
Все конфиги одинаковые.  Но специально сейчас еще раз проверил эту строчку -
присутствует

Кроме того, строчка из лога с работающего хоста указывает на то, что
сертификат передается:
SUCCESS ED45D3CD01EDDB07
/C=RU/ST=Moscow/L=Moscow/O=Company/OU=User/CN=u...@example.com/emailAddress=u...@example.com

А на неработающем нет. И у меня взрывается мозг :)

В формат лога включена информация о передаваемом сертификате - вот строчка
из лог формата:
   log_format  exchange  '$host $remote_addr - $remote_user [$time_local]
$request '
  '$status $body_bytes_sent $http_referer '
  '$http_user_agent $http_x_forwarded_for '
  'upstream $upstream_addr status:$upstream_status time:
$upstream_response_time'
  '$ssl_client_verify $ssl_client_serial
$ssl_client_s_dn';

Сертификаты так же идентичные (rsync клиенских и корневых) Настройки клиента
не меняются. Меняется только адрес обращения

Andrey Kopeyko Wrote:
---

 Предположу, что конфигурация второго вашего nginx отличается
 отсутствием 
 директивы
   ssl_verify_client on;

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256962#msg-256962

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
Anton Gorlov Wrote:
---
 В порядке бреда - возможно во 2 случае по пути шибко умный провайдер с
 особо умной  DPI?
 

Как вариант да, Подтвердить правда будет очень непросто :)

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256966#msg-256966

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
В error логах - только такая строчка с debug:
2015/02/28 20:49:35 [info] 20623#0: *178128083 client sent no required SSL
certificate while reading client request headers, client: 123.123.123.123,
server: exchange.example.com, request: OPTIONS /Microsoft-Server-ActiveSync
HTTP/1.1, host: exchange.example.com

Ну и соответственно в access
exchange.example.com 123.123.123.123 - u...@example.com
[28/Feb/2015:20:49:35 +0300] OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1
400 246 - Android/5.0.2-EAS-2.0 - upstream - status:- time: - NONE 


На рабочем хосте -
192.168.1.12 192.168.1.22 - u...@example.com [28/Feb/2015:21:19:01 +0300]
OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1 200 0 -
Android/5.0.2-EAS-2.0 - upstream 192.168.1.253:443 status:200 time:
0.000 SUCCESS ED45D3CD01EDDB07
/C=RU/ST=Moscow/L=Moscow/O=Company/OU=User/CN=u...@example.com/emailAddress=u...@example.com

192.168.1.12 192.168.1.22 - u...@example.com [28/Feb/2015:21:19:02 +0300]
POST
/Microsoft-Server-ActiveSync?Cmd=FolderSyncUser=user%40example.comDeviceId=android171621781534095DeviceType=Android
HTTP/1.1 200 142 - Android/5.0.2-EAS-2.0 - upstream 192.168.1.253:443
status:200 time: 0.300 SUCCESS ED45D3CD01EDDB07
/C=RU/ST=Moscow/L=Moscow/O=Company/OU=User/CN=u...@example.com/emailAddress=u...@example.com


nginx собран без опции --with-debug, с ним вывод был бы подробнее?
Пересобрать и обновить пока не смогу
Собрать такую же инфу по яблокам так же не выйдет - выходной как-никак :)

Andrey Kopeyko Wrote:
---
 28.02.2015 17:41, ingtar пишет:
 
  На момент ошибки в логах вот такой запрос:
 
  exchange.example.com 111.111.11.111 - u...@example.com
 [28/Feb/2015:17:36:19
  +0300] OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1 400 246 -
  Android/5.0.2-EAS-2.0 - upstream - status:- time: -NONE - -
  Смущает то, что на iOS все работает
 
 Смотрите, что шлёт яблочный клиент - предположу, что таки другое.
 
 И гляньте в error_log - там будут подробности про ошибку.
 
  и этот же же конфиг на другом сервере тоже работает.
 
 Включите debug на обоих серверах 
 (http://nginx.org/ru/docs/debugging_log.html и 
 http://nginx.org/ru/docs/ngx_core_module.html#debug_connection), 
 сделайте по 1 запросу, и тщательно изучайте\сравнивайте отладочные
 логи 
 - и разница должна вам открыться.
 
 
 -- 
 Best regards,
 Andrey Kopeyko and...@kopeyko.ru
 
 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256958#msg-256958

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность Anton Gorlov
01.03.2015 01:53, ingtar пишет:
 В порядке бреда - возможно во 2 случае по пути шибко умный провайдер с
  особо умной  DPI?
  
 Как вариант да, Подтвердить правда будет очень непросто :)

довольно просто - поднять vpn до тестового сервера и проверить оживёт ли
или нет. Это раз
Второе -подключится напрямую к тестовому серверу/тестовой конфигурации -
например по wifi

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность Andrey Kopeyko

28.02.2015 21:27, ingtar пишет:

В error логах - только такая строчка с debug:
2015/02/28 20:49:35 [info] 20623#0: *178128083 client sent no required SSL
certificate while reading client request headers,


Вы внимательно прочитали строчку выше? Что она вам говорит?

Мне она говорит - что надо прекращать копать nginx.
Проблема в настройках или в фичах вашего клиента.


P.S.
Предположу, что конфигурация второго вашего nginx отличается отсутствием 
директивы

ssl_verify_client on;


--
Best regards,
Andrey Kopeyko and...@kopeyko.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность Andrey Kopeyko

28.02.2015 17:41, ingtar пишет:


На момент ошибки в логах вот такой запрос:

exchange.example.com 111.111.11.111 - u...@example.com [28/Feb/2015:17:36:19
+0300] OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1 400 246 -
Android/5.0.2-EAS-2.0 - upstream - status:- time: -NONE - -
Смущает то, что на iOS все работает


Смотрите, что шлёт яблочный клиент - предположу, что таки другое.

И гляньте в error_log - там будут подробности про ошибку.


и этот же же конфиг на другом сервере тоже работает.


Включите debug на обоих серверах 
(http://nginx.org/ru/docs/debugging_log.html и 
http://nginx.org/ru/docs/ngx_core_module.html#debug_connection), 
сделайте по 1 запросу, и тщательно изучайте\сравнивайте отладочные логи 
- и разница должна вам открыться.



--
Best regards,
Andrey Kopeyko and...@kopeyko.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx + Android + ssl = 400

2015-02-28 Пенетрантность ingtar
В общем, ситуация все страннее и страннее. Я скопировал полностью все
конфиги с боевого сервера (много доменных имен) - и у меня на тесте все
отвалилось!
В результате гоняний конфигов туда-сюда выяснил, что если конфиг для
exchange стоит ПЕРВЫМ в списке директории - т.е. имеет например имя
a.conf то все работает.

Хочу еще раз обратить внимание на то, что локейшены подцепляются корректно
при любом имени файла, т.е. nginx понимает, к какому серверу идет обращение.
И лог правильный. Но такое чувство, что при установке соединения клиент
делает некий запрос (может быть без хостнейма в заголовке) и ему отвечает
первый конфиг, который nginx прочитает - верхний.
Засяду ка я за tcpdump...

Andrey Kopeyko Wrote:
---

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256951,256968#msg-256968

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru