TLS (он же Transport Layer Security) – протокол защиты веб-страниц, который заменил собой SSL. По сути TLS = SSL и является следующим поколением (версией) устаревшего и подверженного POODLE-атакам стандарта.
TLS умеет не только шифровать данные, но также проводить аутентификацию пользователей на сервере и проверять информацию на целостность. Протокол обязателен к использованию коммерческими сайтами и организациями, которые хотят подтвердить свою подлинность. Ну и обеспечения конфиденциальности пользователей.
Для установки безопасного канала используется протокол TLS Handshake, также нужно получить сертификат от ЦС и подгрузить криптобиблиотеку, OpenSSL в нашем случае.
Для включения TLS и настройки HTTPS-сервера в Nginx нужно в файле конфигурации в секцию server включить параметр SSL:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate example.com.crt;
ssl_certificate_key example.com.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
…
}
## включение SSL на 443 порте, указание сертификата, ключа, протоколов TLS и используемых шифров
Здесь директива ssl_protocols ограничивает используемые протоколы, а ssl_ciphers описывает разрешенные шифры в формате, поддерживаемом библиотекой OpenSSL. К примеру:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
## пример использования всех шифров в формате OpenSSL
Важно понимать, что операции TLS/SSL достаточно ресурсоемкие, так что даже требуется запуск нескольких рабочих процессов на мультипроцессорных системах. Самой “тяжелой” и в плане нагрузки, и по времени исполнения, является операция TLS Handshake. Поэтому лучшим решением будет оптимизация сессии: постоянные соединения, кэширование, статические ключи и включение OCSP Stapling.
Использование постоянных соединений дает возможность в условиях одного подключения обрабатывать сразу несколько запросов.
Для этого в секцию server файла конфигурации нужно добавить:
server {
…
keepalive_timeout 70;
…
}
##включение keepalive
Кэширование необходимо для повторного использования ключей, чтобы не повторять хэндшейк.
Для этого в секции http файла конфигурации Nginx нужно добавить:
http {
ssl_session_cache shared:SSL:100m;
ssl_session_timeout 1h;
…
}
## включение общего кэша размером 100 МБ и таймаута времени сессии 1 час
В 1 МБ кэша помещается около 4000 сессий, так что представленный пример позволит хранить до 400 000 сессий.
Протокол TLS умеет использовать session tickets для возобновления сеанса, при условии, что клиент их поддерживает (браузеры семейства Chromium и Firefox). Для этого TLS-сервер отправляет клиенту состояние сессии (session ticket), шифруя его своим ключом, и идентификатор ключа. Клиент возобновляет защищенную сессию, отправляя последний тикет на сервер во время инициализации процедуры TLS Handshake. А сервер, в свою очередь, возобновляет сессию в соответствии с сохраненными параметрами.
Реализуется все очень просто. В конфигурацию Nginx в уже знакомой секции server необходимо добавить:
server {
…
ssl_session_ticket_key current.key;
ssl_session_ticket_key prev.key;
ssl_session_ticket_key prevprev.key;
…
}
## включение статических ключей
Online Certificate Status Protocol – механизм проверки актуальности сертификата SSL, который заменил менее быстрый протокол CRL (Certificate Revocation List). При использовании CRL браузер загружает список аннулированных сертификатов и проверяет текущий сертификата, что увеличивает время подключения. Тогда как при использовании OCSP браузер отправляет проверочный запрос на адрес OCSP и в ответ получает статус сертификата, что может сильно нагружать сервера центров сертификации.
Для использования протокола применяется OCSP Stapling – владелец сертификата самостоятельно с определенным интервалом опрашивает сервер OCSP и кэширует ответ, который содержит электронную подпись. Сам ответ “сшивается” с TLS Handshake через расширение запроса Certificate Status Request. Так что на серверы центров сертификации не поступает огромное количество запросов, которые также содержат информацию о просмотрах пользователя.
Чтобы включить OCSP Stapling, нужно добавить несколько строчек кода в файл конфигурации Nginx:
server {
…
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/example.com.crtt;
…
}
## включение OCSP Stapling и подключение доверенного сертификата
Для принудительного использования браузером протокола HTTPS существует механизм под названием Strict Transport Security:
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains”;
## включение Strict-Transport-Security, возраст в секундах
При помощи вот такой функции браузер будет понимать, что нужно использовать протокол HTTPS даже переходя по ссылке HTTP. Это поможет предотвратить часть атак, особенно, если на сервере не установлен редирект с HTTP на HTTPS.
Оптимизация TLS не займет много времени, но поможет существенно ускорить работу протокола и подключения пользователей к защищенным сайтам. А внедрение OCSP Stapling и HSTS еще и повысит безопасность соединения.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…