LINUX.ORG.RU
ФорумAdmin

Срок действия и отзыв сертификата SSL для свзи с nginx

 ,


1

2

Настроена и работает следующая схема: Nginx в режиме обратного проксирования предоставляет https-доступ к внутреннему http-серверу но только тем клиентам, которым выдан SSL-сертификат. Сертификаты генерируются и отзываются скриптами установленного на сервере OpenVPN (build-key-pkcs12, revoke-full).

Заметил, что после истечения срока действия любого из сертификатов, nginx блокирует доступ всем клиентам, в том числе и с валидными сертификатами. OpenVPN-клиенты при этом работают нормально. Работа восстанавливается только после ручного отзыва просроченного сертификата (revoke-full) и перезапуска nginx.

Что может быть причиной блокировки nginx-ом валидных клиентов при появлении просроченного сертификата?

PS. к таким последситвиям приводит истечения срока любого сертификата.



Последнее исправление: azx (всего исправлений: 2)

Что может быть причиной блокировки nginx-ом валидных клиентов при появлении просроченного сертификата?

Выкладывай хороший и плохой сертификат, будет видно.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Плохой сертификат от хорошего отличается только тем, что у плохого Validity Not After до текущей даты, а у хорошего после.

azx
() автор топика
Ответ на: комментарий от thesis

«Хороший» - это тот, срок которого еще не истек, до истечения срока этот сертификат работает и не блокирует сервер. Проблемы начинаются когда у хорошего сертификата заканчивается срок действия. Валятся все.

Может проблема в Nginx? Вот его настройка:

server {
    listen       8080;
    server_name  exam2;

    ssl                  on;
    ssl_certificate      /etc/openvpn/keys/uic.crt;
    ssl_certificate_key  /etc/openvpn/keys/uic.key;

    ssl_session_timeout  15m;
    
    ssl_verify_client on;
    ssl_client_certificate /etc/openvpn/keys/ca.crt;
    ssl_crl /etc/openvpn/keys/crl.pem;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass http://192.168.0.3;
        proxy_redirect default;
        #root   html;
        #index  index.html index.htm;
    }
}

azx
() автор топика

error log смотрел? А если debug включить? :)

router ★★★★★
()
Ответ на: комментарий от azx

Вот смотри: ты сгенерил сертифкат СА, подписал им сертификат сервера, потом нагенерил клиентских сертификатов, подписал их тем же СА и раздал их клиентам.
Допустим, всем нагенерил на год, а одному, Васе, - на неделю.
Через две недели приходит Коля (с хорошим сертификатом) и посылается нафиг.
Вопрос: откуда nginx узнал, что где-то у далекого Васи истек срок действия его, васиного, сертификата?
Или nginx начинает отпинывать юзеров только _после_ того, как просроченный Вася попытается влезть на сайт?
А пока что я думаю, что у тебя истекает срок действия сертификата сервера или СА одновременно с юзерским, либо какая-то сволочь самостоятельно апдейтит CRL и все твои юзерские сертификаты внутри носят один и тот же ключ.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от thesis

Проведу эксперимент, отпишусь. Сам пока не пойму как nginx узнает о том, что у Васи сертификат просрочен, если этот Вася и не заходит даже.

azx
() автор топика
Ответ на: комментарий от azx

Что-то не могу смоделировать ситуацию, пока буду наблюдать.

azx
() автор топика
3 октября 2013 г.
Ответ на: комментарий от thesis

Вот опять повторилась ситуация. Первый сертификат был сгенерирован на 30 дней 2.09.2013. Второй - тоже на 30 дней 25.09.2013.

2 и 3 сентября люди со вторым сертификатом войти не смогли. Я сам попробовал и собрал error.log в режиме debug (пока с ним пытаюсь разобраться сам). 3 сентября сгенерировал третий сертификат и войти с ним смог только после того как отозвал второй сертификат (скрипт revoke-full) и перезагрузил nginx.

Похоже эта неприятность от некорректной настройки SSL. Замечать такое начал когда добавил списки отозванных сертификатов.

azx
() автор топика
Ответ на: комментарий от azx

Ну если ниасилишь, расскажи в подробностях, как генеришь сертификаты. Начиная от CA. Настройку CRL пока отложим.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Вот что нашел в error.log:

2013/10/02 17:04:12 [info] 49212#0: *6 client SSL certificate verify error: (12:CRL has expired) while reading client request headers, client: xx.xx.xx.xx, server: , request: «GET / HTTP/1.1», host: «yy.yy.yy.yy»

этот сертификат был точно не с истекшим сроком!!!

azx
() автор топика
Ответ на: комментарий от azx

(12:CRL has expired)

Дык это не сертификат устарел, а список отзыва. Вот nginx и отбрасывает все сертификаты со страху.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Логично. Правда, CRL у меня генерится внутри скрипта revoke-full с ключем -config. В конфигурационном файле действительно есть строка default_crl_days = 30 - попробую исправить. Спасибо за подсказку.

azx
() автор топика
Ответ на: комментарий от azx

CRL у меня генерится внутри скрипта revoke-full с ключем -config.

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

попробую исправить

Ради теста можно использовать вообще ключ -crlhours, чтобы через часок-другой все сломалось.

Сообразил бы раньше, да сам ни разу на эти грабли не наступал.

thesis ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.