https - 设置 TLS/LDAP 或 TLS/HTTP 连接后,线路上会发生什么情况?

标签 https ldap certificate ssl

我正在改写我的问题,希望能得到更好的答复。我在 serverfault here 上问过类似的问题,并且认为正确且有效的 TLS 服务器是需要“STARTTLS”命令的服务器。

是否可以将 STARTTLS 发布到正确配置的 LDAP 或 HTTP TLS 服务器而不需要额外的端口?我知道从 SMTP 的角度来看这是正确的,但不确定我可以将这些经验应用到其他协议(protocol)的范围有多广。

我花时间阅读(但没有完全掌握)

问:在设置 TLS over LDAP 或 HTTP session 之前,网络上发生了什么?由于这是基于 TCP 的,我可以简单地远程登录到该端口并发出一些命令来验证它是否正常工作(到那时为止)吗?

最佳答案

SSL 和 TLS 在使用方式上几乎没有区别。但是,预先建立 SSL/TLS 与使用诸如 STARTTLS 之类的命令之间存在根本区别。有时,“TLS”与“SSL”相对应,意思是“使用 STARTTLS 模式”,但这是不正确的。

前置 TLS/SSL

在这种情况下,客户端首先发起 TLS/SSL 连接,因此 SSL/TLS 握手首先发生。一旦安全套接字启动,使用它的应用程序就可以开始为 TLS 之上的协议(protocol)发送各种命令(例如 HTTP、此模式下的 LDAP、SMTP)。

在此模式下,SSL/TLS 版本必须在与普通版本不同的端口上运行,例如:HTTPS 在端口 443 上,LDAPS 在端口 636 上,IMAPS 在端口 993 上,而不是分别为 80、389、143 .

实现这些应用程序协议(protocol)的层几乎不需要知道它们在 TLS/SSL 之上运行。有时,它们只是通过 sslwrap 等工具进行隧道传输。

STARTTLS 之后的 TLS(或等价物)

TLS 规范允许握手随时发生,包括在通过同一 TCP 连接以普通 TCP 交换一些数据之后。

一些协议(protocol),包括 LDAP,包含一个命令来告诉应用程序协议(protocol)将进行升级。本质上,LDAP 通信的第一部分以纯文本形式发生,然后发送一条 STARTTLS 消息(仍然以纯文本形式),这表明当前的 TCP 连接将被重用,但下一个命令将被包裹在 TLS/SSL 层中。在此阶段,发生 TLS/SSL 握手,通信“升级”为 TLS/SSL。只有在此之后,通信才能通过 TLS/SSL 得到保护,并且客户端和服务器都知道他们必须从 TLS 层包装/解包他们的命令(通常在 TCP 层和应用层之间添加一个 TLS 库)。

STARTTLS 如何在每个协议(protocol)中实现的细节因协议(protocol)而异(因为这必须在某种程度上与使用它的协议(protocol)兼容)。

即使 HTTP 也有一个使用这种机制的变体,尽管它几乎从不被支持:RFC 2817 Upgrading to TLS Within HTTP/1.1 .这与 HTTPS 的工作方式 ( RFC 2818 ) 完全不同,后者首先启动 TLS/SSL。

STARTTLS 方法的优点是您可以在同一端口上运行安全变体和普通变体,缺点是其后果,特别是潜在的降级攻击或配置中可能出现的错误.

(编辑:正如@GregS 指出的那样,我删除了一个不正确的句子,谢谢。)

(编辑:我还在 this answer on ServerFault 中更多地介绍了 SSL 与 TLS。)

关于https - 设置 TLS/LDAP 或 TLS/HTTP 连接后,线路上会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3660798/

相关文章:

azure - 如何将私钥证书 (.pfx)、公钥证书 (.cer) 上传到 Azure WebApp

iOS 证书和配置文件关系

flutter - 如何在flutter中使用GetX和Get Connect解决ssl证书错误

ajax - Django,使用 Ajax 从 Http 页面安全登录

c++ - LDAP SASL 绑定(bind) C++

python-3.x - ldap3 python 将用户添加到组

android - SSLSocket 连接信任证书

winapi - 如何使用 WinInet 发送 HTTPS 请求?

.htaccess - htaccess 中的 https 和规则顺序(使用表达式引擎)

passwords - 如何使用 spring security 在 LdapUserDetailsMapper 中从 LDAP 访问用户密码?