Я использую TLS очень часто, как пользователь (Госуслуги, Диадок и т.д.) где зоопарк из всяких рутокенов, криптопрох и т.п., как администратор (доступ по SSH, установка сертификатов для Nginx), и как программист, когда например самописному SMTP серверу нужно добавить поддержку STARTLS или заглушить ругань PHP отключая проверку хоста:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Вот не втыкал я как оно работает, тупо следовал инструкциям и примерам, понимая только в общих чертах. А сегодня прочитал этот абзац в статье про SSL/TLS и всё встало на свои места: весь опыт и теория.
Суть асимметричного шифрования заключается в том, что используется пара ключей. Один из них используется в качестве открытого (как правило, он публикуется в самом сертификате владельца), второй ключ называется секретным — он держится в тайне и никогда никому не открывается. Оба ключа работают в паре: один используется для запуска противоположных функций другого ключа. Если открытый ключ используется для того, чтобы зашифровать данные, то расшифровать их можно только секретным ключом и наоборот. Такая взаимосвязь позволяет делать две важные вещи.
Любой пользователь может получить открытый ключ и использовать его для шифрования данных, расшифровать которые может только пользователь, владеющий секретным ключом. (RSA)
Если кто-то шифрует данные, используя свой секретный ключ, каждый может расшифровать эти данные, используя соответствующий открытый ключ. Именно это является основой для цифровых подписей. (DSA)
RSA — самый распространенный алгоритм шифрования с использованием асимметричных ключей.