为什么SSL / TLS没有内置在现代操作系统中?


16

大多数主要操作系统都内置了许多构成Internet基础结构的基本网络协议。例如,TCP,UDP和DNS都内置在Linux,UNIX和Windows中,并可以通过低级系统API供程序员使用。

但是当涉及到SSL或TLS时,必须转向第三方库,例如OpenSSL或Mozilla NSS。

SSL是一个相对较旧的协议,它基本上是与TCP / IP一样普遍的行业标准,那么为什么它不内置在大多数操作系统中?


5
“内置”和“捆绑在一起”之间的实际区别是什么?据我所知,所有操作系统都以某种方式捆绑了SSL / TLS的实现。
zneak 2011年

区别在于TCP和DNS是在内核代码中实现的。但是SSL仅可通过第三方库使用。虽然安装SSL支持通常是一件小事,许多操作系统甚至是开箱即用的,但仍然存在实际的缺点:例如,如果我编写一个使用特定SSL实现的库,例如OpenSSL,NSS,GnuTLS等),我的软件现在具有用户必须处理的依赖项。如果将SSL内置到操作系统中,则不会出现此问题。我的意思是,我不担心任何用户是否需要安装对TCP的支持。
2011年

3
我不认为内置SSL可以解决您提到的问题。现在,您将不再依赖于特定的库,而是依赖于特定的操作系统。
zneak 2011年

1
为什么没有jpeg库?同样有效的问题。您正在查看堆栈的错误位置。所有现代操作系统都捆绑了一些东西以提供SSL支持。(MSFT有.NET SDK,linux / solaris有很多,还有其他)
iivel 2011年

3
您真的要在内核中使用它吗?对我来说似乎已经非常拥挤。
Matthieu M.

Answers:


9

我认为这主要取决于您所看到的“操作系统”。如果是内核,我的回答是:为什么要这样做?我可能是错的,但是DNS是否不是Linux系统上的glibc的一部分,Linux是第三方库?

如果与内核或用户空间无关,则几乎每个操作系统/平台都具有SSL / TLS堆栈,有些可能具有多个堆栈。

它甚至可以被视为优势。如果没有OpenSSL,则必须适应Windows,Mac和Linux(和...)API。TLS不是操作系统的一部分,因此允许编写跨平台TLS应用程序。只需选择一个支持目标平台的TLS库即可。

对我来说,TLS的真正问题是您不能简单地“将其打开”。相反,您必须管理一组受信任的证书,证书吊销列表,自签名证书等。所有这些都需要大量的用户交互。

可悲的是,安全永远不会免费。这是程序员的工作,给用户带来了不便。


无需用户交互即可进行绝大多数安全措施。仅当人们使用无法信任的证书时,才会出现不便。
zneak 2011年

1
这是真的。但是那里有很多自签名证书。国际海事组织,集中管理机构的整个模型无法扩展。如何确定值得信任的根源?没有用户会决定。他们都希望程序员确实做出明智的选择。
paztulio 2011年

证书与“真实”信任无关,它们只是对加密的补充。如果您与流氓服务器对话,则加密通道有什么用?证书的目的是证明您正在与正确的计算机通信,为此,仅通过安全方式收到的任何根证书都足以验证其真实性。其余的,证书并不能证明一个人的意图,它们只是证明它是真实的人,而不是欺骗。
zneak 2011年

7

有法律问题。一些国家将密码学与武器归为同一类。将密码代码放入内核会使导出任何内核代码更加困难。


2

将TCP构建到操作系统中有明显的好处。即使不涉及任何应用程序数据,TCP也需要精确的定时和对网络数据包的快速响应。如果您试图在通用IP API之上的用户空间中实现TCP,那将会更加糟糕。将SSL集成到内核中没有类似的优势。

另一方面,有一些缺点。例如,SSL需要操纵密钥环和证书列表等。通过内核或OS API做到这一点是不明智的。因此,即使操作系统附带了它,它也只是一个库(就像Windows中一样)。这些库已经可以使用了,因此最终只是包装上的更改。


1

原因很多,但也许最引人注目的是,实际上很难正确地使用密码。除非您可以投入大量资源来验证它的正确性和有效性,否则您自己实施它是不明智的。大多数使用密码软件的人没有时间,专业知识或渴望解决这些问题。他们信任第三方库,以便他们的开发人员可以处理那部分工作,而应用程序开发人员可以重新开始他们想要做的事情。

操作系统开发人员没有太大不同。有时会有一种压倒一切的兴趣-例如,您的业务模式或律师要求您保持代码封闭-因此您在此问题上没有太多选择:如果您找不到可以让您做的人您必须要做的,然后就必须自己动手做。其他人已经提到了Microsoft如何做到这一点。但是一般来讲,出于与应用程序开发人员相同的原因,可以使用第三方库的OS开发人员更喜欢这样做。


0

我是Windows开发人员,所以不能说其他操作系统,但是在Windows上,他们内置SSL的时间很长。他们称其为SChannel,虽然受支持,但它是人们必须弄清楚的更加隐秘的API之一。


0

SSL是较低级别协议之上的一层。例如,SSL运行在TCP的顶部(它在IP的顶部)。

操作系统在哪里停止?

很容易就争辩说OS提供了基本服务,例如网络连接,直至OS的客户端“完成任务”。那东西可以随你想要。

内核中的SSL不太可能导致大量的性能提升,那么为什么要麻烦呢?

现代OS内核运行着数百万行代码,添加更多代码只会增加复杂性并增加调试时间。将诸如高层协议之类的东西排除在OS之外可以简化OS的开发,最终对最终应用程序的功能或性能影响不大。(这可能会使开发人员为最终应用程序工作更加痛苦。)


0

加密和SSL有一些内核支持。这是有道理的,因为内核可以更有效地与硬件交互,并且也很方便地保护凭据不受任何应用程序的攻击。很好的例子是kssl,Solaris中的内核级反向SSL代理或内核中的各种加密库(例如用于VPN)。典型的硬件加速加密引擎还具有内核模块(可通过PKCS#11或特定于操作系统的加密接口访问)。

您不经常看到它的一些原因是某些应用程序协议没有正确分层(请考虑使用STARTLS),或者在握手时需要考虑应用程序的决定(请考虑客户端证书和CRL检查),或者只是处于常规的演进中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.