Многие основные сетевые протоколы, составляющие инфраструктуру Интернета, встроены в большинство основных операционных систем. Например, TCP, UDP и DNS встроены в Linux, UNIX и Windows и доступны программисту через низкоуровневые системные API.
Но когда дело доходит до SSL или TLS, нужно обратиться к сторонней библиотеке, такой как OpenSSL или Mozilla NSS.
SSL является относительно старым протоколом, и в основном он является таким же повсеместным отраслевым стандартом, как TCP / IP, так почему же он не встроен в большинство операционных систем?
security
operating-systems
protocol
ssl
Channel72
источник
источник
Ответы:
Я думаю, что это в основном зависит от того, что вы видите как «ОС». Если это ядро, мой ответ будет таким: зачем это нужно? Я могу ошибаться, но разве DNS не является частью glibc в системах Linux, который является сторонней библиотекой?
Если речь идет не о ядре или пространстве пользователя, почти каждая ОС / платформа имеет стек SSL / TLS, а некоторые могут иметь более одного.
Это даже можно рассматривать как преимущество. Если бы не было OpenSSL, вам пришлось бы адаптироваться к API Windows, Mac и Linux (и ...). TLS, не являющийся частью ОС, позволяет писать кроссплатформенные приложения TLS. Просто выберите библиотеку TLS, которая поддерживает ваши целевые платформы.
Для меня реальная проблема с TLS заключается в том, что вы не можете просто «включить его». Вместо этого вы должны управлять набором доверенных сертификатов, списками отзыва сертификатов, самозаверяющими сертификатами и так далее. Все это требует большого взаимодействия с пользователем.
К сожалению, безопасность никогда не приходит бесплатно. Это усилие для программистов и неудобства для пользователей.
источник
Есть юридическая проблема. Некоторые страны ставят криптографию в одну группу с оружием. Размещение криптографического кода в ядре затрудняет экспорт любого кода ядра.
источник
Встраивание TCP в операционную систему имеет очевидные преимущества. TCP требует точной синхронизации и быстрого ответа на сетевые пакеты, даже если данные приложения не задействованы. Если вы попытаетесь реализовать TCP в пространстве пользователя поверх общего IP-API, это будет намного хуже. Подобных преимуществ интеграции SSL в ядре нет.
С другой стороны, есть несколько недостатков. Например, SSL требует манипулирования наборами ключей и списками сертификатов и тому подобным. Делать это через API ядра или ОС было бы не элегантно. Так что, даже если он поставляется с операционной системой, он будет просто библиотекой (как в Windows). Эти библиотеки уже доступны в любом случае, так что в конечном итоге это просто изменение упаковки.
источник
Есть ряд причин, но, пожалуй, наиболее убедительным является то, что криптография очень, очень трудно сделать правильно . Неразумно применять его самостоятельно, если вы не можете посвятить основные ресурсы проверке его правильности и надежности. Большинство людей, которые работают с криптографическим программным обеспечением, не имеют времени, опыта или желания увязнуть в этом; они доверяют сторонним библиотекам, так что их разработчики могут выполнять эту часть работы, в то время как разработчики приложений могут вернуться к созданию того, что они хотят сделать.
Разработчики ОС не так уж и отличаются. Иногда это имеет первостепенный интерес - например, ваша бизнес-модель или юристы требуют, чтобы вы держали код закрытым, и поэтому у вас нет большого выбора в этом вопросе: если вы не можете найти кого-то, кто позволит вам сделать это то, что вы должны, то вы должны свернуть свое собственное. Другие уже упоминали, как Microsoft делает это. Но, вообще говоря, разработчики ОС, которые могут использовать сторонние библиотеки, предпочитают делать это по тем же причинам, что и разработчики приложений.
источник
Я разработчик Windows, поэтому я не могу говорить о других ОС, но в Windows у них очень долго был встроенный SSL. Они называют его SChannel, и, хотя он поддерживается, он является одним из самых загадочных API, которые когда-либо придется выяснять.
источник
SSL - это слой поверх протокола более низкого уровня. Например, SSL работает поверх TCP (который находится поверх IP).
Где останавливается ОС?
Очень легко утверждать, что ОС предоставляет базовые сервисы, такие как работа в сети, до того момента, когда клиент ОС «делает вещи». И это может быть что угодно.
Весьма маловероятно, что SSL в ядре приведет к значительному увеличению производительности, так зачем беспокоиться?
Современные ядра ОС работают с миллионами строк кода, добавление большего просто добавляет сложности и увеличивает время отладки. Исключение таких вещей, как протоколы более высокого уровня, из ОС облегчает разработку ОС и, в конце концов, не имеет большого значения для функции или производительности конечного приложения. (Это может сделать работу разработчиков для конечного приложения немного более болезненной.)
источник
Существует некоторая поддержка ядра для Crypto и SSL. Это имеет смысл, поскольку ядро может более эффективно взаимодействовать с оборудованием, а также удобно защищать учетные данные от любого приложения. Хорошими примерами являются kssl, прокси-SSL-прокси уровня ядра в Solaris или различные крипто-библиотеки в ядре (например, для VPN). Типичный аппаратно-ускоренный крипто-движок также имеет модуль ядра (и доступен через PKCS # 11 или специальные крипто-интерфейсы ОС).
Некоторые причины, по которым вы не видите его чаще, состоят в том, что некоторые прикладные протоколы не имеют должного уровня (например, STARTLS) или требуют решений приложений во время рукопожатия (например, проверка сертификата клиента и CRL) или просто находятся в регулярной эволюции.
источник