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
Tweet

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-записи