SSL (Secure Sockets Layer - уровень защищенных сокетов) - это протокол обеспечивающий безопасную передачу информации в интернете по средством ее шифрования. Данный протокол был разработан компанией Netscape Communications. Так как 1 версия, так и не увидела свет, то 2 версия вышла в 1995 году, в ней было довольно много уязвимостей, поэтому спустя год вышла версия 3.0. По умолчанию HTTPS использует 443 TCP-порт. Для шифрования данных используются 40, 56 и 128-битные, чем больше байт, тем надежнее ключ. Ключи в 128 бит используются только в США и в Канаде.
Handshake - это защищенное соединение, которое устанавливает браузер, когда посетитель заходит на сайт.
HSTS - это механизм, активирующий защищённое соединение.
HTTP (HyperText Transfer Protocol — протокол передачи гипертекста) - это протокол, который служит для передачи информации между клиентским приложением и сервером. Чтобы определить использует ли сайт SSL шифрование достаточно посмотреть в адресную строку браузера, если вместо http, вы увидите https, значит сайт использует данный протокол:
SSL генерирует три ключа
- Публичный - это ключ, который шифрует ваши данные при отправке на сервер.
- Приватный - это ключ, который расшифровывает ваши данные.
- Сеансовый - это ключ, которые генерируется на время, которое пользователь проводит на сайте, он как шифрует, так и расшифровывает ваше сообщение.
После того как ключи сгенерированы, на основе публичного ключа формируется запрос на SSL-сертификат в Центр сертификации.
SSL-сертификат содержит сведения о владельце ключа, центре сертификации и данные об открытом ключе. При использовании сертификата SSL сервер и клиент обмениваются приветственными сообщениями инициализации, содержащими сведения о версии протокола, идентификаторе сессии, способе шифрования и сжатия.
Далее сервер отсылает клиенту сертификат или ключевое сообщение, при необходимости требует клиентский сертификат.
После нескольких операций происходит окончательное уточнение алгоритма и ключей, отправка сервером финального сообщения и, наконец, обмен секретными данными. Такой процесс идентификации может занимать немало времени, поэтому при повторном соединении обычно используется идентификатор сессии предыдущего соединения. После перехода на https вам будет необходимо заменить все в полные ссылки на относительные и сделать так, чтобы ваш сайт был доступен только по https и активировать HSTS протокол:
Strict-Transport-Security: max-age=31536000;
Если у вас небольшой проект, например блог используйте сертификат с проверкой домена:
DCV Email - вам придет письмо, где нужно будет подтвердить, что именно вы владелец домена.
DNS CNAME - вам необходимо создать особую запись в вашем DNS, и центр сертификации его проверит.
HTTP CSR Hash - вам дадут специальный.txt файл, который вы загрузите на свой сервер, потом центр сертификации должен будет убедится в его наличии и выдаст вам сертификат.
Если у вас крупный проект, то используйте Business Validation. Он проверяет не только домен, но и связь компании с сайтом:
Extended validation SSL - это сертификат с расширенной проверкой.
Wildcard SSL - используется когда у вас несколько поддоменов с разной региональной привязкой. Используется для защиты поддоменов.
SAN SSL - используется для защиты нескольких доменных имен, хостов, IP-адресов, шлюзов и межсетевых экранов.
CodeSigning SSL - используется для защиты приложений.
Если HTTPS не будет установлен на 443 порту, то некоторые антивирусные компании занесут ваш сайт в блэклист. Само собой SSL не дает 100% гарантию того, что ваши данные не перехватят, в этом протоколе достаточно уязвимостей.
Например можно использовать sslstrip или злоумышленник может похитить приватный ключ имея доступ к клавиатуре, браузеру, операционной системе и PGP маршрутизатору.
Также злоумышленник может выполнить MitM-атаку, злоупотребляя механизмом кэширования SSL/TLS-сеансов. MitM-атаку можно провести даже без подделки сертификатов и хищения ключа эксплуатируя логические ошибки.
P.S Статья ориентирована для новичков, а стоит ли на практике описывать и эксплуатировать ошибке в SSL, я подумаю, когда и в каком разделе.