Отправка логов веб-серверов на серверы Curator позволяет анализировать и очищать HTTP-трафик, идущий к этим веб-серверам на уровне приложений (L7 по модели OSI/ISO) в тех ситуациях, когда техническая возможность анализировать сам HTTP-трафик отсутствует.
В частности, рекомендуется настроить отправку логов, если вы используете обратный TCP-прокси Curator. Этот прокси анализирует трафик на транспортном уровне (L4), но с помощью анализа логов может также осуществлять защиту от некоторых атак уровня приложений (L7).
Чтобы передавать логи в сеть Curator:
- Определите IP-адреса и порты для передачи логов.
- Задайте формат логов.
- Настройте сбор и отправку логов.
Важно
Для анализа требуются логи именно того веб-сервера в вашей сети, который принимает внешние запросы первым, вне зависимости от того, куда он маршрутизирует или проксирует их позже. При этом необходимы только логи доступа (access logs). Логи ошибок передавать не требуется.
1. Определите IP-адреса и порты для передачи логов
Этот шаг выполняется вами совместно со специалистами технической поддержки Curator. С вашей стороны необходимо зафиксировать, с какого IP-адреса будет происходить отправка логов. Со стороны Curator будут назначены IP-адрес и порт приёмника логов (log receiver). Назначенный IP-адрес может отличаться от Curator IP, указанного в личном кабинете.
2. Задайте формат логов
Настройте сервер так, чтобы логи доступа (access logs) записывались в определённом формате, из которого обратный TCP-прокси Curator сможет извлечь всю необходимую для анализа информацию. Требования к формату логов могут меняться в будущем, в этом случае специалисты технической поддержки Curator заблаговременно сообщат вам об изменениях.
Ниже представлены актуальные форматы логов для популярных веб-серверов.
Укажите следующую строку в опции log_format.
'2xFFFFFF|:,_|$bytes_sent|:,_|$http_accept|:,_|$http_accept_encoding|:,_|$http_accept_language|:,_|$http_cookie|:,_|$http_host|:,_|$http_referer|:,_|$http_user_agent|:,_|$http_x_forwarded_for|:,_|$remote_addr|:,_|$request|:,_|$request_time|:,_|$status|:,_|$time_local|:,_|$upstream_response_time|:,_|$http_x_requested_with|:,_|$http_authorization|:,_|$remote_port|:,_|-|:,_|$msec|:,_|'
Укажите следующую строку в опции CustomLog.
'5xFFFFFF|:,_|%O|:,_|%{Accept}i|:,_|%{Accept-Encoding}i|:,_|%{Accept-Language}i|:,_|%{Cookie}i|:,_|%{Host}i|:,_|%{Referer}i|:,_|%{User-Agent}i|:,_|%{X-Forwarded-For}i|:,_|%a|:,_|%r|:,_|%{ms}T|:,_|%s|:,_|%t|:,_|%D|:,_|%{X-Requested-With}i|:,_|%{Authorization}i|:,_|%{remote}p|:,_|%{sec}t.%{msec_frac}t|:,_|-|:,_|'
Укажите следующую строку при настройке логирования согласно руководству Configuring Request Logging.
'3xFFFFFF|:,_|$RESPONSE_SIZE|:,_|$Accept|:,_|${Accept-Encoding}|:,_|${Accept-Language}|:,_|$Cookie|:,_|$Host|:,_|$Referer|:,_|${User-Agent}|:,_|${X-Forwarded-For}|:,_|$CLIENT_IP|:,_|$CLIENT_PORT|:,_|$HTTP_REQUEST|:,_|$RESPONSE_MSECS|:,_|$HTTP_STATCODE|:,_|$DATE_YYYY/$DATE_MM/${DATE_DD}_$TIME_HH24:$TIME_MM:$TIME_SS|:,_|$HTTP_KEEPALIVE|:,_|$SERVER_IP|:,_|$SERVER_PORT|:,_|$BIGIP_CACHED|:,_|${X-Requested-With}|:,_|${Authorization}|:,_|$CLIENT_PORT|:,_|$TIME_MSECS|:,_|-|:,_|'
Вставьте следующий фрагмент в конфигурационный файл HAProxy.
capture request header Accept len 4096
capture request header Accept-Encoding len 4096
capture request header Accept-Language len 4096
capture request header Cookie len 16384
capture request header Host len 4096
capture request header Referer len 4096
capture request header User-Agent len 4096
capture request header X-Forwarded-For len 4096
capture request header X-Requested-With len 4096
capture request header Authorization len 4096
log-format "4xFFFFFF|:,_|%B|:,_|%[capture.req.hdr(0)]|:,_|%[capture.req.hdr(1)]|:,_|%[capture.req.hdr(2)]|:,_|%[capture.req.hdr(3)]|:,_|%[capture.req.hdr(4)]|:,_|%[capture.req.hdr(5)]|:,_|%[capture.req.hdr(6)]|:,_|%[capture.req.hdr(7)]|:,_|%ci|:,_|%r|:,_|%Ta|:,_|%ST|:,_|%Tl|:,_|%Tr|:,_|%[capture.req.hdr(8)]|:,_|%[capture.req.hdr(9)]|:,_|%cp|:,_|%Ts.%ms|:,_|-|:,_|"
3. Настройте сбор и отправку логов
В зависимости от используемого веб-сервера, вам могут быть доступны разные способы отправки логов в сеть Curator. Наиболее простым способом является отправка логов напрямую из веб-сервера, если он поддерживает такую конфигурацию. Более универсальным решением является использование системы сбора логов для любого веб-сервера.
Обратите внимание, что приёмник логов на стороне Curator принимает логи по протоколу syslog поверх транспортного протокола TCP. Некоторые веб-серверы поддерживают протокол syslog только поверх UDP или через Unix-сокеты. В таком случае рекомендуется собирать их с помощью систему сбора логов, которая будет перенаправлять логи в сеть Curator.

Отправка логов напрямую
Если веб-сервер, обрабатывающий запросы пользователей, способен отправлять логи в сеть Curator по протоколу syslog самостоятельно, то вам достаточно произвести соответствующие настройки этого веб-сервера. Например, инструкцию по отправке логов напрямую из F5 BIG-IP можно найти здесь: Configuring the BIG-IP system to log to a remote syslog server.
Чтобы использовать для отправки логов защищённый протокол TLS, даже если сам веб-сервер не поддерживает этот протокол, можно воспользоваться дополнительной программой stunnel, как описано в этой инструкции: SSL Encrypting Syslog with Stunnel.
Использование систем сбора логов
Система сбора логов — это программное обеспечение, которое может выполнять роль промежуточного узла между вашим веб-сервером и приёмником логов Curator. Примерами таких систем для Unix-подобных операционных систем являются rsyslog и syslog-ng, для Windows — Snare. При выборе системы сбора логов обратите внимание, что сеть Curator принимает логи по протоколу syslog поверх транспортного протокола TCP, а не UDP.
Примечание
Популярные системы сбора логов также поддерживают шифрование отправляемых логов с использованием протокола TLS, например:
Взаимодействие между веб-сервером и системой сбора логов может быть настроено разными способами, включая чтение логов из текстового файла, через Unix-сокет или по протоколам TCP или UDP. Выбор способа зависит от того, находятся ли веб-сервер и система сбора логов на одном сервере или на разных серверах.
Также обычно требуется выполнить настройку самого веб-сервера, чтобы отправлять логи в нужный файл, сокет или на нужный адрес. Подробнее читайте в документации используемого веб-сервера, например:
Важно
При использовании системы сбора логов rsyslog необходимо дополнительно сконфигурировать очереди записей, а также правила их игнорирования (discard). Подробнее можно прочитать по ссылке: Action Queue cfg discarding local messages.
Примеры конфигурации rsyslog
Ниже приведены примеры конфигурационных файлов rsyslog для HAProxy и NGINX. Нужный конфигурационный файл следует поместить в директорию /etc/rsyslog.d/, после чего следует перезапустить rsyslog. Для использования транспортного протокола TLS требуется также подставить в конфигурационный файле путь к сертификату Curator.
$AddUnixListenSocket /var/lib/haproxy/dev/log
if ($programname startswith 'haproxy') then {
if ($msg contains '4xFFFFFF') then {
$template codename-fwd,"<%PRI%>1 %timegenerated:::date-rfc3339% codename %syslogtag:1:32% - - %msg:::drop-last-lf%\n"
action(type="omfwd"
Target="<IP-адрес приёмника логов>"
Port="<порт приёмника логов>"
protocol="tcp"
queue.filename="codename-fwd-q1"
queue.discardSeverity="4"
queue.discardMark="25000"
queue.size="30000"
queue.highWatermark="10000"
queue.lowWatermark="0"
queue.timeoutEnqueue="500"
queue.maxDiskSpace="20m"
queue.timeoutWorkerthreadShutdown="-1"
queue.saveOnShutdown="on"
queue.type="LinkedList"
Action.ResumeRetryCount="-1"
template="codename-fwd"
)
}
}
$AddUnixListenSocket /var/lib/haproxy/dev/log
global(
DefaultNetstreamDriverCAFile="<путь к файлу сертификата приёмника>"
)
if ($programname startswith 'haproxy') then {
if ($msg contains '4xFFFFFF') then {
$template codename-fwd,"<%PRI%>1 %timegenerated:::date-rfc3339% codename %syslogtag:1:32% - - %msg:::drop-last-lf%\n"
action(type="omfwd"
Target="<IP-адрес приёмника логов>"
Port="<порт приёмника логов>"
protocol="tcp"
queue.filename="codename-fwd-q1"
queue.discardSeverity="4"
queue.discardMark="25000"
queue.size="30000"
queue.highWatermark="10000"
queue.lowWatermark="0"
queue.timeoutEnqueue="500"
queue.maxDiskSpace="20m"
queue.timeoutWorkerthreadShutdown="-1"
queue.saveOnShutdown="on"
queue.type="LinkedList"
Action.ResumeRetryCount="-1"
template="codename-fwd"
)
}
}
input(type="imuxsock"
Socket="/var/log/nginx/nginx.sock")
template(name="codename-fwd" type="string"
string="<%PRI%>1 %timegenerated:::date-rfc3339% codename %syslogtag:1:32% - - %msg:::drop-last-lf%\n"
)
if ($programname startswith 'nginx') then {
if ($msg contains '2xFFFFFF') then {
action(type="omfwd"
Target="<IP-адрес приёмника логов>"
Port="<порт приёмника логов>"
protocol="tcp"
StreamDriver="gtls"
StreamDriverMode="1"
StreamDriverAuthMode="anon"
queue.filename="codename-fwd-q1"
queue.discardSeverity="4"
queue.discardMark="30000"
queue.size="30000"
queue.highWatermark="10000"
queue.lowWatermark="0"
queue.timeoutEnqueue="500"
queue.maxDiskSpace="20m"
queue.timeoutWorkerthreadShutdown="-1"
queue.saveOnShutdown="on"
queue.type="LinkedList"
Action.ResumeRetryCount="-1"
template="codename-fwd"
)
& stop
}
}
input(type="imuxsock"
Socket="/var/log/nginx/nginx.sock")
template(name="codename-fwd" type="string"
string="<%PRI%>1 %timegenerated:::date-rfc3339% codename %syslogtag:1:32% - - %msg:::drop-last-lf%\n"
)
global(
DefaultNetstreamDriverCAFile="<путь к файлу сертификата приёмника>"
)
if ($programname startswith 'nginx') then {
if ($msg contains '2xFFFFFF') then {
action(type="omfwd"
Target="<IP-адрес приёмника логов>"
Port="<порт приёмника логов>"
protocol="tcp"
StreamDriver="gtls"
StreamDriverMode="1"
StreamDriverAuthMode="anon"
queue.filename="codename-fwd-q1"
queue.discardSeverity="4"
queue.discardMark="30000"
queue.size="30000"
queue.highWatermark="10000"
queue.lowWatermark="0"
queue.timeoutEnqueue="500"
queue.maxDiskSpace="20m"
queue.timeoutWorkerthreadShutdown="-1"
queue.saveOnShutdown="on"
queue.type="LinkedList"
Action.ResumeRetryCount="-1"
template="codename-fwd"
)
& stop
}
}
Сертификаты Curator
Чтобы отправлять данные по транспортному протоколу TLS, необходимо использовать сертификат приёмника логов Curator.
Разные приёмники на стороне Curator используют разные сертификаты. Чтобы узнать, на какой именно приёмник вам нужно передавать логи, свяжитесь со специалистами технической поддержки Curator. Также вы можете проверять подлинность CA (certificate authority), которым подписаны данные сертификаты.
Сохраните нужный сертификат в файл, например, /etc/rsyslog.d/codename-syslog-ca.crt, и укажите этот в путь в конфигурации системы сбора логов. Файлы конфигурации для rsyslog вы можете найти в разделе Примеры конфигурации rsyslog.
-----BEGIN CERTIFICATE-----
MIIFoDCCA4igAwIBAgIUSm2ENhIrqiVbcdGikZvsaic1ChcwDQYJKoZIhvcNAQEL
BQAwUTEZMBcGA1UEAwwQUXJhdG9yIFN5c2xvZyBDQTEUMBIGA1UECgwLUXJhdG9y
IExhYnMxHjAcBgkqhkiG9w0BCQEWD21haWxAcXJhdG9yLm5ldDAeFw0yNjA3MDgy
MDQzNDJaFw0zMTA3MDcyMDQzNDJaME8xFDASBgNVBAoMC1FyYXRvciBMYWJzMRcw
FQYDVQQDDA4xNzguMjQ4LjIzOS4yOTEeMBwGCSqGSIb3DQEJARYPbWFpbEBxcmF0
b3IubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAusYLrODkJPkf
OhZzaLupR+yO1L5SxDka8tW89Mf8mYkpmLPVd42B/8Zw4aqR+YYmsvob8sJYlhv6
zPl1dRocPZ3qXkbvVRj+IrWWzKRvVIiN7RS/Ducw+PcDxWA+3Gq7YFO2z8nxctn2
YqfIUCsitjQAFxx/UNpCvk3w1gQUSsDh2rPvZZNy1DlmpKyOArkA8r3qaLqY55vk
qq37cHDsf+ycZxQ4cj8Yxj+yltX7XIx7nOcE/s2esb/fzeqB0fVxugZe3Cqumkq+
oI3m0NJsT/F35hu4eFlqK/yRvmwsFqgFBozZ2FuyxStWocYdKyYYIe3OX1NQSS2y
1f1FRPwae6MAydnotHmBRCWdrFK38y7AdmztcFN68qF9iKG5WhOk3sAg39Korlt/
86Ki3Eeggml4IkKPxi7bOW+fCVIJCN7y2eMMUlZVDabJk1Bq0nwZ1f+UEmYXBJ7L
Ys5rr71hpTcjYe2QFjZH6FtIRbMwlW5tLY31OR1iy9ybDZmirbQVfEXSdokDBZjm
W5UhrnWipO0XFek74WffnbGaOmbDUL4iFvfzR1qOO/YTB5LK3RzXZesl0kSk3InK
eXhcSTjeGLisxiSsGRlZqcJhA4tHywr0poIZvMeZHoejsTgvvAxhaCSX0NbWj88u
Qbrkl4FqzLJdtaAt3KhCtPfwaZi9QDMCAwEAAaNyMHAwHQYDVR0OBBYEFPWE0qob
GzPsWrrg22lwhjsAtqiHMB8GA1UdIwQYMBaAFGyR/xVNsHdETvLwhPDkBYlAEBAo
MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MA0GCSqGSIb3DQEBCwUAA4ICAQBsKcJW8WrHFFzQ5KFxiyDmxQGFUdGGsq3l4VLE
qIReEW2uLnFaCxvBCzaW4OIQ6VqBg5zOT4blMxA+P7s3VVka6cl3epUa6ytOPl+U
N+0uIdmhpzchEUTNf8VCBHYWhZGJMRa3Bpa7i2PnFAu1eC9kCaOvIvdxaJcvn2EA
sSt/P+VBcS9zduY1+woeflwyT896EZ0/Td+WDqG6I81U1z5684tBZKXao9rffioV
WdKUFxd0f1ECilZdj5ADFY7Znu6o0gk3X59Lo43Yp37tfJiIniKSxc1N2LPghU8z
rkxUHa3MK/6nbk/anF6PwAIE2Rm5oCaoK5xNuQU87u9O3mEIKQS3Ps/x1Qdu+JJZ
/nD7lIM9QFAbjpoFcBWR/2O9c4x275CL8L9yzLxsqJQKX+zpAguXrNUnIVPvTI5v
9YsuCrrcdwK9OlgrRXFerF14jgAdKIDYk2p0cBHfPyNlm5GQKotp2JwHwcR+sN5G
5vlVVoMK5YdE7HxYM7XKBBCdyTqjMcdJVQO+QAxb3mwTy23S4ckuwGk5NI5W3OLE
/xZhpj0lMtRAoNogDIYu4z31+YNJe1M0Xu5A/f/Tt2MIhVlaPiOVb43vaEu4mFaT
vml2e9/qPuX3CyBbwLGJBy3DmP5iaCxuBCnNKMawce0sRuFmGgotFlWY2uzP3nKr
G0+f3g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFoDCCA4igAwIBAgIUH3aOxgrPp8ReTBS0xgwMiDo+RzYwDQYJKoZIhvcNAQEL
BQAwUTEZMBcGA1UEAwwQUXJhdG9yIFN5c2xvZyBDQTEUMBIGA1UECgwLUXJhdG9y
IExhYnMxHjAcBgkqhkiG9w0BCQEWD21haWxAcXJhdG9yLm5ldDAeFw0yNjA3MDgy
MDQzNDRaFw0zMTA3MDcyMDQzNDRaME8xFDASBgNVBAoMC1FyYXRvciBMYWJzMRcw
FQYDVQQDDA4xNzguMjQ4LjIzOS4zMDEeMBwGCSqGSIb3DQEJARYPbWFpbEBxcmF0
b3IubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAusYLrODkJPkf
OhZzaLupR+yO1L5SxDka8tW89Mf8mYkpmLPVd42B/8Zw4aqR+YYmsvob8sJYlhv6
zPl1dRocPZ3qXkbvVRj+IrWWzKRvVIiN7RS/Ducw+PcDxWA+3Gq7YFO2z8nxctn2
YqfIUCsitjQAFxx/UNpCvk3w1gQUSsDh2rPvZZNy1DlmpKyOArkA8r3qaLqY55vk
qq37cHDsf+ycZxQ4cj8Yxj+yltX7XIx7nOcE/s2esb/fzeqB0fVxugZe3Cqumkq+
oI3m0NJsT/F35hu4eFlqK/yRvmwsFqgFBozZ2FuyxStWocYdKyYYIe3OX1NQSS2y
1f1FRPwae6MAydnotHmBRCWdrFK38y7AdmztcFN68qF9iKG5WhOk3sAg39Korlt/
86Ki3Eeggml4IkKPxi7bOW+fCVIJCN7y2eMMUlZVDabJk1Bq0nwZ1f+UEmYXBJ7L
Ys5rr71hpTcjYe2QFjZH6FtIRbMwlW5tLY31OR1iy9ybDZmirbQVfEXSdokDBZjm
W5UhrnWipO0XFek74WffnbGaOmbDUL4iFvfzR1qOO/YTB5LK3RzXZesl0kSk3InK
eXhcSTjeGLisxiSsGRlZqcJhA4tHywr0poIZvMeZHoejsTgvvAxhaCSX0NbWj88u
Qbrkl4FqzLJdtaAt3KhCtPfwaZi9QDMCAwEAAaNyMHAwHQYDVR0OBBYEFPWE0qob
GzPsWrrg22lwhjsAtqiHMB8GA1UdIwQYMBaAFGyR/xVNsHdETvLwhPDkBYlAEBAo
MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MA0GCSqGSIb3DQEBCwUAA4ICAQBpf//Kfr6Ya1sNVOaQWB9a3MOlqZ2hmpf0SPi3
AddwWpmXLa50DRpDR6TeV88TPyhyj9AWaA7KXZCdK1a798o4FNYwZRieNN4QOugk
gUekvTy9fSjKgAhMSeX0LgVMi5DaKC71mdGDaD1SfBp2irC6ZT6tPOmQHCJ/iqJg
HMd1KG2+mtwWnhAHLGYLm/yUUhdzToDDUjS2kwVJuFB9uIFP1xZiQz6mZUdrI4ZA
ao2Umdm8u5NJ4Xfy52JrcsPsAK4nptpys8YmoQd2FBfYLS8kkz1S9tziCDejB/3d
CeBAK6RPpzHeVG3c7l3yUAgmLpgmn5diXw6Fyxq7pbTqknI3d6hOTrnAYJGgdfvb
l8N8TBoGjr7Uw4yFbefp4pEcyFD+UalakRoSk4Eb0c6DhsYpGRSST/4wbatbdudo
PbeMMs0vjtihpahz7lWKpGZOVdDdXUCi/voSQL2mg//R90AS3kCKFYAlV01yaxL6
vv9Ccq7uT2Hbv7zMWHdjZS0M3fsUh9/Vd4ygy+D3NoUsmptpsQJy/ffFgaLZWw6e
Gu8C17PfYn6vFD9vP90YYKY8LoghbeMQpXPUx0BGYzzQoLBtusIUVUblRcQDfYvC
QnL8tT739AFEe5oRtjGzaETpKJEQtOxltI3LFh1wvm1CMQo//s0Gx2lXDFBt1gXS
XivWYw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFoDCCA4igAwIBAgIUcPorCucj1+yBchknNH0qa76Ax5EwDQYJKoZIhvcNAQEL
BQAwUTEZMBcGA1UEAwwQUXJhdG9yIFN5c2xvZyBDQTEUMBIGA1UECgwLUXJhdG9y
IExhYnMxHjAcBgkqhkiG9w0BCQEWD21haWxAcXJhdG9yLm5ldDAeFw0yNjA3MDgy
MDQzNDVaFw0zMTA3MDcyMDQzNDVaME8xFDASBgNVBAoMC1FyYXRvciBMYWJzMRcw
FQYDVQQDDA4xODUuOTQuMTA4LjI1NDEeMBwGCSqGSIb3DQEJARYPbWFpbEBxcmF0
b3IubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAusYLrODkJPkf
OhZzaLupR+yO1L5SxDka8tW89Mf8mYkpmLPVd42B/8Zw4aqR+YYmsvob8sJYlhv6
zPl1dRocPZ3qXkbvVRj+IrWWzKRvVIiN7RS/Ducw+PcDxWA+3Gq7YFO2z8nxctn2
YqfIUCsitjQAFxx/UNpCvk3w1gQUSsDh2rPvZZNy1DlmpKyOArkA8r3qaLqY55vk
qq37cHDsf+ycZxQ4cj8Yxj+yltX7XIx7nOcE/s2esb/fzeqB0fVxugZe3Cqumkq+
oI3m0NJsT/F35hu4eFlqK/yRvmwsFqgFBozZ2FuyxStWocYdKyYYIe3OX1NQSS2y
1f1FRPwae6MAydnotHmBRCWdrFK38y7AdmztcFN68qF9iKG5WhOk3sAg39Korlt/
86Ki3Eeggml4IkKPxi7bOW+fCVIJCN7y2eMMUlZVDabJk1Bq0nwZ1f+UEmYXBJ7L
Ys5rr71hpTcjYe2QFjZH6FtIRbMwlW5tLY31OR1iy9ybDZmirbQVfEXSdokDBZjm
W5UhrnWipO0XFek74WffnbGaOmbDUL4iFvfzR1qOO/YTB5LK3RzXZesl0kSk3InK
eXhcSTjeGLisxiSsGRlZqcJhA4tHywr0poIZvMeZHoejsTgvvAxhaCSX0NbWj88u
Qbrkl4FqzLJdtaAt3KhCtPfwaZi9QDMCAwEAAaNyMHAwHQYDVR0OBBYEFPWE0qob
GzPsWrrg22lwhjsAtqiHMB8GA1UdIwQYMBaAFGyR/xVNsHdETvLwhPDkBYlAEBAo
MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MA0GCSqGSIb3DQEBCwUAA4ICAQB9lYRBwR2uLybwHEiHJ5vNPAv65ZUxZKIaqN5T
VYSfr3R3zpZRzcUYLSicCe6YoTZqavaIAxsmqxDEsK/C9JLOTdw3WdLhbOCxiqzT
7rmx/X3OOGuM9BdGmglVti9s7J67Mj+U9q+t9qrQnPmDPQYom9sWnTZ7fT6lwiGy
+QXJAW+I9XrxScU0KOBemdCYTCFHpBEJanYTtBbA+0jtCRw8WZ0cRtmJYiuni1IT
dk/mAHvKppGrOd8vxsXT98TpWqLyyYpdQC7eprIwfbsl+cix6LzN7kw5BoMNcd+N
2Y5J9EJNSnDSh1FTkuU2tg4Kzem+15rZzAUBOrY+8pQDjlepMqY9e6IC9kthKmf4
Okm5pFX4OLkqK2nTLpqF4H9Ias6Io16ROpJ8Gd437MnnE3X+ZqNpnu9fCiajUwjF
4hBCPHBVLHK0fC81s1vZkzggcXq0zY4SVMoFaEbcjRtlUrdRLBik9PldpvJLxAdQ
/LlGEjf9EOTr6Rrb5qGovKmQGnyujrTMoWeV7AegODFxv0OSZk3oukmJnLn4BF4E
Kbbqa5tmwJlB+FtUGdRadH8Jk8urlCwF3TL62uAjbwfdq7yU6dp6g/Vl7tEq7dlC
SolMjcfWnUkFu9f8pcgD6SKNxNxRRwlnyQUNfKoat/n4MwnYuN2hJT+jcj4ILf6M
EgK5VA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFnjCCA4agAwIBAgIUEJgBKIAHq2QIM+1t4Oi+dtltjSwwDQYJKoZIhvcNAQEL
BQAwUTEZMBcGA1UEAwwQUXJhdG9yIFN5c2xvZyBDQTEUMBIGA1UECgwLUXJhdG9y
IExhYnMxHjAcBgkqhkiG9w0BCQEWD21haWxAcXJhdG9yLm5ldDAeFw0yNjA3MDgy
MDQzMzZaFw0zMTA3MDcyMDQzMzZaME0xFDASBgNVBAoMC1FyYXRvciBMYWJzMRUw
EwYDVQQDDAwxMDAuNjQuMS4yNTQxHjAcBgkqhkiG9w0BCQEWD21haWxAcXJhdG9y
Lm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALrGC6zg5CT5HzoW
c2i7qUfsjtS+UsQ5GvLVvPTH/JmJKZiz1XeNgf/GcOGqkfmGJrL6G/LCWJYb+sz5
dXUaHD2d6l5G71UY/iK1lsykb1SIje0Uvw7nMPj3A8VgPtxqu2BTts/J8XLZ9mKn
yFArIrY0ABccf1DaQr5N8NYEFErA4dqz72WTctQ5ZqSsjgK5APK96mi6mOeb5Kqt
+3Bw7H/snGcUOHI/GMY/spbV+1yMe5znBP7NnrG/383qgdH1cboGXtwqrppKvqCN
5tDSbE/xd+YbuHhZaiv8kb5sLBaoBQaM2dhbssUrVqHGHSsmGCHtzl9TUEktstX9
RUT8GnujAMnZ6LR5gUQlnaxSt/MuwHZs7XBTevKhfYihuVoTpN7AIN/SqK5bf/Oi
otxHoIJpeCJCj8Yu2zlvnwlSCQje8tnjDFJWVQ2myZNQatJ8GdX/lBJmFwSey2LO
a6+9YaU3I2HtkBY2R+hbSEWzMJVubS2N9TkdYsvcmw2Zoq20FXxF0naJAwWY5luV
Ia51oqTtFxXpO+Fn352xmjpmw1C+Ihb380dajjv2EweSyt0c12XrJdJEpNyJynl4
XEk43hi4rMYkrBkZWanCYQOLR8sK9KaCGbzHmR6Ho7E4L7wMYWgkl9DW1o/PLkG6
5JeBasyyXbWgLdyoQrT38GmYvUAzAgMBAAGjcjBwMB0GA1UdDgQWBBT1hNKqGxsz
7Fq64NtpcIY7ALaohzAfBgNVHSMEGDAWgBRskf8VTbB3RE7y8ITw5AWJQBAQKDAJ
BgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDATAN
BgkqhkiG9w0BAQsFAAOCAgEAk77DkGwJld0cCF2KJysst2ycm0s4Et0cunM4D96s
pMkbBVs513shGM6Hq+RQy9rknrQuM4RoP2/ZctIc+Eny8YWMyHkcp7Uog43wDlEO
niYUde9HMgT6XjsgKKmFw2p8si60zIOKQktbMZUn4ORBBLwStPWVam/X4IZeKfT0
J5I/0ka6V2bIJGeUxL7PjxtAoTuH+vvsh7EE9ZdNNNTy43B1C4czCoEir55v+S98
GJpUnKVs57aQ3GjXiqpZJmM+Z8RmmamLgNhtSrplHf6sNKLMITgPZCZP9gEjjcqq
cHpGXFnPC21aUdjb6ArD8KpRqGGAPWN5adZpkDWV43o3GxY63vrBZUbvLKYTf75Q
CN0MIS6cEihouWw0U9Q3qab+BrEdsr6oUBplazfMWRRZwz6vBuKzh5ncWDvb1NpJ
rIHWkGNk9yR2Z2JWHZS5Xh1y9uKBbXtdy0BFECyek/CwmyhwSkeKnnFYGuwIiH/t
pw9qBWbVUQXX1NPAkYNdT6k9Js98h+QYOJ3JvwqzsIZQGyHM86OmG6CxLBqZSGyo
TDhNhCSVcvUl1rKFwx7/+aqKVIloqR0Rk3MzHDVQJ6ZloqogLYcSBT7WH2hNnfu8
XLBbS6htklXPcDiACuZe53sStwWkOxZQfOiMJgUk8R8dPZNkoUuvLgnlj2UN9m5Q
sbM=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIENDCCA52gAwIBAgICBHYwDQYJKoZIhvcNAQELBQAwgYQxCzAJBgNVBAYTAlJV
MQ8wDQYDVQQIEwZNb3Njb3cxDzANBgNVBAcTBk1vc2NvdzEMMAoGA1UEChMDSExM
MQ8wDQYDVQQLEwZRcmF0b3IxFDASBgNVBAMTC1FyYXRvciBOb2RlMR4wHAYJKoZI
hvcNAQkBFg9tYWlsQHFyYXRvci5uZXQwHhcNMjEwNzEyMTUyMjM5WhcNMzEwNzEw
MTUyMjM5WjBRMRkwFwYDVQQDDBBRcmF0b3IgU3lzbG9nIENBMRQwEgYDVQQKDAtR
cmF0b3IgTGFiczEeMBwGCSqGSIb3DQEJARYPbWFpbEBxcmF0b3IubmV0MIICIjAN
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmQmcErDsVsHgz3+C+Q1EEVlMN2Hg
bnBBlVWu5d0Cp9Em2T5+L2XrvGb6fd1XEEgDi4qiOd6DtCPO15NaUCr4su7RVpxw
/flzuHcq7DyS0kyjEA0dkaZ3L20n1Lx5jjmnC8i+5vdaDhC94NfWdQdkHnTTO47P
kB80RkaJTVACZAIA8ab86L02PmL54YOiTSX+/IUoO5SILElZewVJ8fkjnOwmGPiP
X0dkP9YAV/6qfoQfa9PVUkPeV9UHNUpW2laN09hAog4UybeIzTV0bWweiCnlj5TW
16zn0JcfTViiNn9HUw3EWmbi8YUhv86yTiLjMXHDafhFzQqTDKkg5J4dn7ye0Aqz
qXUo09OjrBC4+fX5RgImJoXMeFS2exSB5f8PxDpBS95LQVuSZzXesuDUzQVJD9T0
JT57u/27EBlTwQqMLgqo39RE8iaroduibUjFKAzBn3xXAOMx5EbPK0aliymq82PD
BwB69JDm/i0xSeRIa5r7C/mAjVfcDQxQVz97IfJXek0FChUjHkddgWpHuYqYQreq
5sZX218te+86yh5RjRmgN52gb9c4KppJEE04fAXJYhMARuMhuswyCzWLPP8SHIO/
QeHD4ifw+FyT8jh/qiFhcIcY48wC2/4IOsfP5OWTUfzfjuZF+g6SSGXhDdKidAWU
Z2mBa/UsZZsMvsECAwEAAaNjMGEwHQYDVR0OBBYEFGyR/xVNsHdETvLwhPDkBYlA
EBAoMB8GA1UdIwQYMBaAFAbuy5jX1iZn8znnGOwGytbFKt/XMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4GBAI5bpB87OoTP
MLGE4ZsTSa2LmjYPLz9i0ZOubzUAZwz7B81RxSdFDz90Y2QNmUOx7Pztzz13IW5X
smtRqOf3Q7jRUWSzBi/JFTEqWALVcGrFixzA9QOPJ/nOo1FC8hlxmwxA6yoXRnW3
ntngAJiziHrrtNKkjILT0Jv4zbk25Jtm
-----END CERTIFICATE-----