我在http头文件中没有看到任何关于安全连接的内容(对于http/1.1、http/2和https基本上都是一样的)。服务器如何知道我们需要安全的连接?
据我所知,https只是在进入TCP连接之前,由TLS‘工具’(仍然是在用户端,也就是在浏览器中)加密的普通老式http。
似乎唯一的认可是在安全连接中,在TCP握手之后立即发出TLS客户端问候消息。如果服务器被设置为支持给定套接字上的安全连接,那么当它看不到该消息时,它就会出错。当连接不安全时,服务器会出错,因为它不知道如何处理客户端hello。
这是正确的吗?
发布于 2019-03-04 07:30:22
对于给定的端口号,HTTPS处于打开或关闭状态。当服务器配置为在给定端口上侦听时,您可以将其配置为侦听HTTPS或HTTP (方式因服务器而异)。如果服务器被配置为侦听HTTPS连接,那么当某些东西连接时,它会立即启动加密过程,如果另一端不希望加密,则连接将失败。
当浏览器连接到服务器时,它会根据用户输入的URL模式来决定是使用HTTP还是HTTPS。如果他们输入https://,它将在指定的端口上建立到服务器的加密连接(如果未指定,则为443 )。如果服务器不希望在该端口上建立加密连接,则连接将失败。
如果用户键入http://,则浏览器在指定的端口上说出未加密的http (如果未指定,则为80 )。同样,如果服务器希望对流量进行加密,则连接将失败。
只有当双方有匹配的期望时,连接才会成功。
理论上,可以使用HTTP Upgrade header启动未加密的HTTP连接,然后启用加密,这与其他协议中的STARTTLS类似。据我所知,这样的功能即使用过也很少。几乎总是通过使用特定的加密流量端口号从一开始就启用加密。
https://stackoverflow.com/questions/54973761
复制相似问题