大多数主要操作系统都内置了许多构成Internet基础结构的基本网络协议。例如,TCP,UDP和DNS都内置在Linux,UNIX和Windows中,并可以通过低级系统API供程序员使用。
但是当涉及到SSL或TLS时,必须转向第三方库,例如OpenSSL或Mozilla NSS。
SSL是一个相对较旧的协议,它基本上是与TCP / IP一样普遍的行业标准,那么为什么它不内置在大多数操作系统中?
大多数主要操作系统都内置了许多构成Internet基础结构的基本网络协议。例如,TCP,UDP和DNS都内置在Linux,UNIX和Windows中,并可以通过低级系统API供程序员使用。
但是当涉及到SSL或TLS时,必须转向第三方库,例如OpenSSL或Mozilla NSS。
SSL是一个相对较旧的协议,它基本上是与TCP / IP一样普遍的行业标准,那么为什么它不内置在大多数操作系统中?
Answers:
我认为这主要取决于您所看到的“操作系统”。如果是内核,我的回答是:为什么要这样做?我可能是错的,但是DNS是否不是Linux系统上的glibc的一部分,Linux是第三方库?
如果与内核或用户空间无关,则几乎每个操作系统/平台都具有SSL / TLS堆栈,有些可能具有多个堆栈。
它甚至可以被视为优势。如果没有OpenSSL,则必须适应Windows,Mac和Linux(和...)API。TLS不是操作系统的一部分,因此允许编写跨平台TLS应用程序。只需选择一个支持目标平台的TLS库即可。
对我来说,TLS的真正问题是您不能简单地“将其打开”。相反,您必须管理一组受信任的证书,证书吊销列表,自签名证书等。所有这些都需要大量的用户交互。
可悲的是,安全永远不会免费。这是程序员的工作,给用户带来了不便。
原因很多,但也许最引人注目的是,实际上很难正确地使用密码。除非您可以投入大量资源来验证它的正确性和有效性,否则您自己实施它是不明智的。大多数使用密码软件的人没有时间,专业知识或渴望解决这些问题。他们信任第三方库,以便他们的开发人员可以处理那部分工作,而应用程序开发人员可以重新开始他们想要做的事情。
操作系统开发人员没有太大不同。有时会有一种压倒一切的兴趣-例如,您的业务模式或律师要求您保持代码封闭-因此您在此问题上没有太多选择:如果您找不到可以让您做的人您必须要做的,然后就必须自己动手做。其他人已经提到了Microsoft如何做到这一点。但是一般来讲,出于与应用程序开发人员相同的原因,可以使用第三方库的OS开发人员更喜欢这样做。