Почему SSL / TLS не встроен в современные операционные системы?

16

Многие основные сетевые протоколы, составляющие инфраструктуру Интернета, встроены в большинство основных операционных систем. Например, TCP, UDP и DNS встроены в Linux, UNIX и Windows и доступны программисту через низкоуровневые системные API.

Но когда дело доходит до SSL или TLS, нужно обратиться к сторонней библиотеке, такой как OpenSSL или Mozilla NSS.

SSL является относительно старым протоколом, и в основном он является таким же повсеместным отраслевым стандартом, как TCP / IP, так почему же он не встроен в большинство операционных систем?

Channel72
источник
5
В чем практическая разница между «встроенным» и «в комплекте»? Насколько я знаю, все операционные системы так или иначе идут в комплекте реализации SSL / TLS.
zneak
Разница в том, что TCP и DNS реализованы в коде ядра. Но SSL доступен только через сторонние библиотеки. Хотя обычно установка поддержки SSL является тривиальным вопросом, и многие ОС даже поставляются с ней «из коробки», все же существуют практические недостатки: например, если я напишу библиотеку, которая использует конкретную реализацию SSL (например, OpenSSL, NSS, GnuTLS и т. Д.) Теперь у моего программного обеспечения есть зависимость, с которой приходится иметь дело пользователям. Это было бы не проблема, если бы SSL был встроен в ОС. Я имею в виду, я не волнуюсь, если кому-то из моих пользователей потребуется установить поддержку TCP.
Channel72
3
Я не думаю, что встроенный SSL решит проблему, о которой вы говорите. Теперь вместо зависимости от конкретных библиотек вы будете зависеть от конкретных операционных систем.
zneak
1
Почему нет библиотек jpeg? Это же эффективный вопрос. Вы смотрите в неправильном месте стека. Все современные ОС имеют что-то связанное для обеспечения поддержки SSL. (У MSFT есть .NET SDK, у linux / solaris есть куча + и есть другие)
iivel
3
Вы действительно хотите это в ядре? Кажется, мне уже очень тесно.
Матье М.

Ответы:

9

Я думаю, что это в основном зависит от того, что вы видите как «ОС». Если это ядро, мой ответ будет таким: зачем это нужно? Я могу ошибаться, но разве DNS не является частью glibc в системах Linux, который является сторонней библиотекой?

Если речь идет не о ядре или пространстве пользователя, почти каждая ОС / платформа имеет стек SSL / TLS, а некоторые могут иметь более одного.

Это даже можно рассматривать как преимущество. Если бы не было OpenSSL, вам пришлось бы адаптироваться к API Windows, Mac и Linux (и ...). TLS, не являющийся частью ОС, позволяет писать кроссплатформенные приложения TLS. Просто выберите библиотеку TLS, которая поддерживает ваши целевые платформы.

Для меня реальная проблема с TLS заключается в том, что вы не можете просто «включить его». Вместо этого вы должны управлять набором доверенных сертификатов, списками отзыва сертификатов, самозаверяющими сертификатами и так далее. Все это требует большого взаимодействия с пользователем.

К сожалению, безопасность никогда не приходит бесплатно. Это усилие для программистов и неудобства для пользователей.

paztulio
источник
Подавляющее большинство систем безопасности может происходить без какого-либо взаимодействия с пользователем. Неудобство возникает только тогда, когда люди используют сертификаты, которым нельзя доверять.
zneak
1
Это верно. Но там так много самозаверяющих сертификатов. ИМО, вся модель централизованной власти не масштабируется. Как решить, каким корням доверять? Ни один пользователь не примет решение об этом. Все они надеются, что программисты сделали правильный выбор.
paztulio
Сертификаты - это не столько «настоящее» доверие, сколько дополнение к шифрованию. Что хорошего в зашифрованном канале, если вы общаетесь с мошенническим сервером? Смысл сертификатов состоит в том, чтобы доказать, что вы общаетесь с нужным компьютером, и для этого достаточно просто проверить любой подлинный сертификат, полученный вами с помощью безопасных средств. В остальном, сертификаты ничего не доказывают о намерениях человека, они просто доказывают, что это настоящий человек, а не обман.
zneak
7

Есть юридическая проблема. Некоторые страны ставят криптографию в одну группу с оружием. Размещение криптографического кода в ядре затрудняет экспорт любого кода ядра.

dan_waterworth
источник
2

Встраивание TCP в операционную систему имеет очевидные преимущества. TCP требует точной синхронизации и быстрого ответа на сетевые пакеты, даже если данные приложения не задействованы. Если вы попытаетесь реализовать TCP в пространстве пользователя поверх общего IP-API, это будет намного хуже. Подобных преимуществ интеграции SSL в ядре нет.

С другой стороны, есть несколько недостатков. Например, SSL требует манипулирования наборами ключей и списками сертификатов и тому подобным. Делать это через API ядра или ОС было бы не элегантно. Так что, даже если он поставляется с операционной системой, он будет просто библиотекой (как в Windows). Эти библиотеки уже доступны в любом случае, так что в конечном итоге это просто изменение упаковки.

Дэвид Шварц
источник
1

Есть ряд причин, но, пожалуй, наиболее убедительным является то, что криптография очень, очень трудно сделать правильно . Неразумно применять его самостоятельно, если вы не можете посвятить основные ресурсы проверке его правильности и надежности. Большинство людей, которые работают с криптографическим программным обеспечением, не имеют времени, опыта или желания увязнуть в этом; они доверяют сторонним библиотекам, так что их разработчики могут выполнять эту часть работы, в то время как разработчики приложений могут вернуться к созданию того, что они хотят сделать.

Разработчики ОС не так уж и отличаются. Иногда это имеет первостепенный интерес - например, ваша бизнес-модель или юристы требуют, чтобы вы держали код закрытым, и поэтому у вас нет большого выбора в этом вопросе: если вы не можете найти кого-то, кто позволит вам сделать это то, что вы должны, то вы должны свернуть свое собственное. Другие уже упоминали, как Microsoft делает это. Но, вообще говоря, разработчики ОС, которые могут использовать сторонние библиотеки, предпочитают делать это по тем же причинам, что и разработчики приложений.

Ложка
источник
0

Я разработчик Windows, поэтому я не могу говорить о других ОС, но в Windows у них очень долго был встроенный SSL. Они называют его SChannel, и, хотя он поддерживается, он является одним из самых загадочных API, которые когда-либо придется выяснять.

DXM
источник
0

SSL - это слой поверх протокола более низкого уровня. Например, SSL работает поверх TCP (который находится поверх IP).

Где останавливается ОС?

Очень легко утверждать, что ОС предоставляет базовые сервисы, такие как работа в сети, до того момента, когда клиент ОС «делает вещи». И это может быть что угодно.

Весьма маловероятно, что SSL в ядре приведет к значительному увеличению производительности, так зачем беспокоиться?

Современные ядра ОС работают с миллионами строк кода, добавление большего просто добавляет сложности и увеличивает время отладки. Исключение таких вещей, как протоколы более высокого уровня, из ОС облегчает разработку ОС и, в конце концов, не имеет большого значения для функции или производительности конечного приложения. (Это может сделать работу разработчиков для конечного приложения немного более болезненной.)

quickly_now
источник
0

Существует некоторая поддержка ядра для Crypto и SSL. Это имеет смысл, поскольку ядро ​​может более эффективно взаимодействовать с оборудованием, а также удобно защищать учетные данные от любого приложения. Хорошими примерами являются kssl, прокси-SSL-прокси уровня ядра в Solaris или различные крипто-библиотеки в ядре (например, для VPN). Типичный аппаратно-ускоренный крипто-движок также имеет модуль ядра (и доступен через PKCS # 11 или специальные крипто-интерфейсы ОС).

Некоторые причины, по которым вы не видите его чаще, состоят в том, что некоторые прикладные протоколы не имеют должного уровня (например, STARTLS) или требуют решений приложений во время рукопожатия (например, проверка сертификата клиента и CRL) или просто находятся в регулярной эволюции.

Экес
источник