ssl_session_ticket_key and SNI

Anton Yuzhaninov citrin at citrin.ru
Tue May 6 11:46:36 UTC 2014


Здравствуйте!

Наблюдаю проблему с таким конфигом:

http {
         default_type text/plain;

         access_log logs/access.log combined;


         server {
                 server_name example.ru;
                 listen 443 default;

                 ssl on;
                 ssl_certificate     example.ru.crt;
                 ssl_certificate_key example.ru.key;

                 ssl_session_ticket_key ticket.key;

                 location / {
                         return 200 "example.ru\n";
                 }
         }

         server {
                 server_name example.com;
                 listen 443;

                 ssl on;
                 ssl_certificate     example.com.crt;
                 ssl_certificate_key example.com.key;

                 location / {
                         return 200 "example.com\n";
                 }
         }
}

Желаемое поведение:
- для example.ru использовать ticket key из файла.
- для example.com (и всех остальных блоков server) использовать случайный 
ticket key, генерируемый в nginx при старте.

Что наблюдается:
- Без SNI работает и отдается сертификат example.ru
- Если в SNI указать example.ru - работает и отдается сертификат example.ru
- Если в SNI указать example.com - соединение рвётся с очень неясной диагностикой.
- Если в SNI указать example.com, но отключить tickets на клиенте - работает.

Версии
nginx 1.7.0
OpenSSL 1.0.1g-freebsd 7 Apr 2014

Если убрать ssl_session_ticket_key задавать на уровне http, то всё работает. Но 
хочется брать tickets из файла только для одного сервера.



Подробная информация о списке рассылки nginx-ru