Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SSL

 SSL

17.01.2018

Avatar for Evgeny E. Neverov

Evgeny E. Neverov

January 17, 2018

More Decks by Evgeny E. Neverov

Other Decks in Programming

Transcript

  1. SSL

  2. TLS

  3. • Протоколы безопасности транспортного уровня, обеспечивает защищённую передачу данных •

    Аутентификация — пара ключей (открытый+закрытый), несимметричное шифрование • Конфиденциальность — секретный ключ, симметричное шифрование
  4. Diffie-Hellman-Merkle Алиса и Боб g и p — два не

    секретных числа Алиса генерирует большое случайное число a Боб генерирует большое случайное число b
  5. Diffie-Hellman-Merkle Алиса: A = ga mod p Боб: B =

    gb mod p Обмениваются полученными A и B (также публично) Алиса: Ba mod p = g(a*b) mod p Боб: Ab mod p = g(b*a) mod p Ba mod p = Ab mod p = K
  6. Алиса Боб Ева знает Ева не знает p = 23

    g = 5 p = 23 g = 5 p = 23 g = 5 a = 6 A = 56 mod 23 = 8 b = 15 B = 515 mod 23 = 19 A = 8 B = 19 a = ? b = ? B = 19 b = ? A = 8 a = ? K = 196 mod 23 = 2 K = 815 mod 23 = 2 K = ? (515)6 mod 23 (56)15 mod 23
  7. Шифрование
 с открытым ключом • Алиса заранее генерирует p, g,

    а и вычисляет A • Алиса публикует (p, g и A), но оставляет в секрете a • Боб берёт публичные данные, придумывает секретный b и вычисляет свой публичный ключ B и общий секретный ключ K • Боб шифрует сообщение ключом K и передаёт Алисе зашифрованное сообщение и свой ключ B • Алиса получает ключ B, вычисляет K и расшифровывает сообщение
  8. PKI — Public Key Infrastructure • Закрытый ключ известен только

    владельцу • Удостоверяющий центр создаёт сертификат открытого ключа • Никто не доверяет никому, все доверяют УЦ • УЦ содержит архив сертификатов и хранилище отозванных сертификатов • УЦ образуют иерархию, публичные ключи корневых УЦ сохраняются в ОС
  9. Клиент ←→ Сервер •Браузер запрашивает у сервера страницу по HTTPS

    •Сервер отправляет браузеру копию своего сертификата открытого ключа •Браузер проверяет подлинность сертификата по подписи доверенного УЦ + проверяет сертификат на «отозванность» •Браузер и сервер вырабатывают сеансовый ключ по протоколу Диффи-Хеллмана для шифрования данных
  10. Цепочка сертификатов •Корневой УЦ есть в браузере и операционке, ему

    доверяют •Соответственно доверие распространяется на дочерний УЦ и на сертификат сайта
  11. Разновидности
 SSL-сертификатов • Domain Validation (DV) — подтверждают, что владелец

    приватного ключа имеет право управления доменом • Organisation Validation (OV) — подтверждают домен и существование организации (достаточно скана уведомления о регистрации юрлица) • Extended Validation (EV) — подтверждают домен и расширенная проверка (звонят и общаются, запрашивают бух. документы)
  12. 95% магазинов достаточно DV • Магазину важно, чтобы не доёбывался

    гугл • И чтобы данные клиентов были в безопасности • Да в жопу эту «безопасность», главное — чтоб гугл не доёбывался
  13. Выпускаем сертификат 1. Сгенерировать приватный ключ и запрос сертификата (CSR):

    https:Y//csrgenerator.com/ либо # openssl genrsa -out domain.ru.key 2048
 # openssl req -new -sha256 -key domain.ru.key -out domain.ru.csr
  14. Выпускаем сертификат 2. Вводим информацию о клиенте: — Страна (две

    буквы): RU
 — Штат (область): Moscow
 — Город: Moscow
 — Компания: Alfa-Bank, LLC
 — Отдел в компании: IT Development
 — Common Name: YYwww.alfabank.ru # домен!
 — E-mail: [email protected] Пароль — пустой
  15. Выпускаем сертификат -----BEGIN CERTIFICATE REQUEST----- MIIC3jCCAcYCAQAwgZgxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzAN BgNVBAcMBk1vc2NvdzEXMBUGA1UECgwOQWxmYS1CYW5rLCBMTEMxFzAVBgNVBAsM DklUIERldmVsb3BtZW50MRQwEgYDVQQDDAthbGZhYmFuay5ydTEfMB0GCSqGSIb3 DQEJARYQaW5mb0BhbGZhYmFuay5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAL9u3EAh9NOl6DLesmqJabphBP0iVsVI6tFJ6rtiid94gfykovzNBzbt

    UBCbWoVA2rlGX7J9XVW4POj06oy92kANBSGDPj8gdXwkVyudC/kVpGzU6j6jmuaI XeVbYDzmvuDQT9PT+VmMiidtqQcI4kX9i9cW8r/qU4FJlO/5WyYtPzHYwRDE3pas f7/uUErOMgA62BTQMeiXzxnUOEDDfcC7HIsCtHY//7hlRfZ5lUYPROD4u4T9abbdt KwErPQwquyKJpAAFf1nKxny2ZfCB1VSrY4/hg6unZhwtnGUUAsgTpaAPveNdeWxa q6kPlHOQX35tmdjiBpRnLoE9XNY9O8MCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IB AQBXYYzY0oIOEDgrpEF5XdZTynjxyMnBzvmg/3SCCI32DS182/db796ndvS+hUl1 cGeKjCba3H6JpwIZrWvVZm0RffZ8nWA8xZ2hTvpJ2IesiQSzlnYvjbVdAEu+UEd1 THF0NXcvB9LmVPV+BWhnFUONLA7ShtgQvFkWID0uiwpyjNhgpjHxjfHmAwClzAGL RTOPojrp/2AaMglOtLwPrn6cds5dGHS4OahNfXDShUyNnOKESI8ziSh0F0QF4ivV 2CWE6efqhXLksmCl3mjIJWlML3kLnY//WFn7Og8qbKSdlEcpMJRlmKN1r7JHUyW0D 13NIkMzeJ0oMb3k22219eCdy -----END CERTIFICATE REQUEST-----
  16. Выпускаем сертификат 3. CSR отправляем в форме провайдеру, вводим необходимые

    дополнительные данные (адреса, телефоны). 4. Подтверждаем владение доменом:
 — Запись в DNS,
 — Код в письме на [email protected],
 — Текстовый файл в корне сайта. 5. Получаем на почту, указанную в CSR, выпущенный сертификат.
  17. Установка сертификата 1. Приватный ключ:
 /etc/nginx/ssl/<domain>.<year>.key 2. Публичный ключ +

    промежуточный УЦ:
 /etc/nginx/ssl/<domain>.<year>.cert 3. Цепочка УЦ от промежуточного к корневому:
 /etc/nginx/ssl/<domain>.<year>.trust # chmod 0600 /etc/nginx/sslY/*
 # chown root:root /etc/nginx/sslY/*
 # nginx -t # проверяем, что конфиг корректный
 # service nginx restart
  18. Ещё круче: HSTS • Механизм, принудительно включающий HTTPS • Браузер

    обращается к HTTP-версии • Сервер возвращает заголовок:
 Strict-Transport-Security: max-age: 31536000; includeSubDOmains; preload • Браузер сам преобразовывает ссылки на HTTPS и не пускает пользователя на сайт, если безопасное соединение установить нельзя.
  19. Ещё круче: HSTS • Первый запрос всё равно HTTP и

    злоумышленник может его перехватить. • Списки сайтов с HSTS предзагруженные в браузер (в хроме и лисе) • Зарегистрировать сайт можно тут:
 https:Y//hstspreload.org • Разрегистрировать сложно, если сертификат накрылся, сайт не откроется.
  20. Ещё более круче:
 DNS CAA • Прописывает в DNS-записи домена,

    каким УЦ можно доверять: tech-director.ru. IN CAA 0 issue "comodoca.com" • Генератор записи: https:Y//sslmate.com/caa/ • Минус: не все провайдеры DNS дают возможность добавлять CAA-записи