nginx proxy + ssl +clr ошибка "400 неверных запросов"

Вот ситуация - есть trasnparent nginx-прокси, который обрабатывает SSL-сертификаты и делает это хорошо, пока мы не решим добавить управление списком отзыва, требуемое по соображениям безопасности. Это когда строка "ssl_crl" вступает в игру и все испортила.

server {
    listen  80;
    rewrite ^ https://$host$request_uri permanent;
}


server {
    listen 443 ssl;
    server_name example.com;
    ssl on;
    ssl_certificate /home/netadmin/keys/tid.crt;
    ssl_certificate_key /home/netadmin/keys/tid.key;
    ssl_session_cache shared:SSL:10m;
    ssl_client_certificate /home/netadmin/keys/personchain.pem;
    ssl_crl /home/netadmin/keys/personlist.crl;
    ssl_verify_client on;
    ssl_verify_depth 2;
    error_log /var/log/nginx/debug.log debug;

    location / {
            proxy_pass      http://111.111.111.111:80;
    }

Сервер всегда будет выдавать ошибку "400 Bad Request" всякий раз, когда пользователь пытается аутентифицироваться с помощью SSL. Обратите внимание, что точно такой же (не тот, потому что синтаксис) конфиг прекрасно работает в Apache. Теперь сертификаты безупречны, что было доказано много раз, вот проверка проверки, например

openssl crl -CAfile personchain.pem -inform PEM -in personlist.crl -lastupdate -nextupdate -noout
verify OK
lastUpdate=Apr 22 14:59:18 2013 GMT 
nextUpdate=Apr 29 14:59:18 2013 GMT 

Ссылки CRL работают, и нет ничего, что выглядит неправильно, вот часть журнала ошибок.

2013/04/23 15:47:42 [info] 3612#0: *1 client SSL certificate verify error: (3:unable to get certificate CRL) while reading client request headers, client: 192.168.122.1, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

В основном это единственная ошибка, и, как я уже говорил, те же сертификаты работают с Apache. Я думал, что это может быть ошибкой, но последнее уведомление о подобной ошибке датируется 2011 годом, поэтому я сомневаюсь, что никто еще не решил эту головоломку.

2 ответа

Решение

Ответ тот же, что и здесь: /questions/632427/kak-proverit-neskolko-spiskov-crl-s-pomoschyu-autentifikatsii-klienta-nginx/632438#632438: Если у вас несколько ЦС, вам необходимо объединить все CRL.

Вы должны объединить все CRL в цепочке: корневой CA и промежуточный CA.

С помощью openssl crl -in crl_list.crl -noout -text только читать первый crl, но nginx читает их правильно и проверяет сертификат пользователя.

Вдохновлен: https://www.ruby-forum.com/topic/6874370

Имеет ли процесс nginx доступ для чтения к этому crl? Кроме того, это в правильном формате pem и подписано тем же именем, что и root crt?

Пример:

$ openssl crl -text -noout -in personlist.crl

Ссылка: http://www.apacheweek.com/features/crl

Другие вопросы по тегам