viewing paste Unknown #12575 | Text

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
NGINX + SSL = POWER!
 
 
 
 
используемые сервера: 
5.9.109.104 / 192.168.10.13 (kolibri)
5.9.109.105 / 192.168.10.1 (gateway) (он же https://enter.taxiwest.ru)
Для удобства, будем их называть бакэнд (kolibri) и фронтэнд (gateway).+
 
 
 
 
**BACKEND** ''5.9.109.104 / 192.168.10.13 (kolibri)''
 
Этот сервер используется для генерации и подписи клиентских сертификатов.
Все скрипты и сертификаты лежат в ''/etc/nginx/ssl''
 
 
 
//
Описание файлов.//
 
''ca.config'' - конфиг для **OpenSSL**
 
''ca.crt'' - самоподписанный сертификат. Необходим для подписи клиентских сертификатов.
 
**''certgen_cl.sh''** - скрипт для генерации и подписи клиентских запароленых сертификатов. Использование: 
 
        Usage: ./certgen_cl.sh keyname city unit name e-mail password
 
После его использование - в директории ''/etc/nginx/ssl'' появился три файла с расширениями ''.key .crt .p12''
 
''%certname.p12%'' - это и есть **PKCS#12**-сертификат, который необходимо скормить браузеру пользователя. 
 
''**revoke.sh**'' - скрипт для отзыва клиентских сертификатов.
Кушает в качестве аргумента имя ключа.
К примеру, если у нас есть файл сертификата ''cert1.p12''
 
то для его отзыва нужно запустить ''revoke.sh cert1''
**ВАЖНО:** при отзыве сертификата - нужно скопировать crl.pem (список отозванных сертификатов) на фронтэнд и релоднуть nginx (service nging reload), иначе - фронтэнд будет "проксировать" на бакэнд клиентов с "отозванными" сертификатами. 
 
 
 
 
''server.csr'' - сертификат для **NGINX**
 
''server.crt'' - подписанный сертификат для **NGINX**
 
''server.nopass.key'' - беспарольная копия сертификата для **NGINX**
 
''crl.pem'' - Certificate Revocation List - список отзыва сертификатов. В нем перечисляются все отозванные клиентские сертификаты. 
 
 
 
**FRONTEND** ''5.9.109.105 / 192.168.10.1 (gateway)''
 
Этот сервер используется для авторизации клиента и проверки клиентского сертификата на действительность и подпись. 
Он используется как прокси сервер для работы с бакэндом.
 
Если посмотреть на нем конфиг nginx'а - то можно вдуплить что к чему:
 
    server {
    listen *:443;
    server_name  enter.taxiwest.ru;
 
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.nopass.key;
    ssl_client_certificate /etc/nginx/ssl/ca.crt;
    ssl_verify_client on;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_crl /etc/nginx/ssl/crl.pem;
 
    ssl on;
 
 
        location / {
        proxy_pass http://192.168.10.13/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
 
 
    access_log  /var/log/nginx/enter.taxiwest.ru/enter.taxiwest.ru.access.log;
    error_log  /var/log/nginx/enter.taxiwest.ru/enter.taxiwest.ru.error.log error;
    root /var/www;
    charset cp1251;
    index index.php;
    rewrite_log on;
    autoindex off;
    client_max_body_size 100m;
 
 
 
    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;
    }
 
 
Nginx использует для проверки подписи клиентских сертификатов файл ca.crt, 
server.crt и server.nopass.key 
/etc/nginx/ssl/crl.pem - используется для проверки сертификата на валидность. Следовательно, если клиент будет стучаться на фронтэнд с отозванным сертификатом - энджик его дропнет. 
Viewed 823 times, submitted by Guest.