是否有可能设置一个服务器,而在端口443监听不使用它?
类似的东西:
server { listen 443; server_name _; ssl off; return 444; }
上面代码的问题是,nginx在这个块上强制使用SSL(忽略ssl off ),并在失去证书时失败。
有些人可能会问为什么??,但请考虑这是我的学术问题:)
RFC 2818指出HTTP / HTTPS之间的端口分离来自发送的第一个数据不同,因为HTTPS在发送HTTP之前启动TLS会话。
如果你不是在说正确的协议,服务器就无法理解你。
此外,更新前一个的RFC 7230指出:
如果端口子组件是空的或者没有给出,则TCP端口443是默认的,并且在发送第一HTTP之前,用户代理务必通过使用强encryption来端对端地确保其与源服务器的连接是安全的请求。
因此,在传输到TCP 443端口之前对内容进行encryption是每个RFC的要求。 你不能打败它。
要求的原因是OSI层的分离,TLS(SSL)在第五层,HTTP在第七层。 他们无法相互理解。 这反映在软件中,这些部分的处理通常由不同的代码片段完成(nginx处理HTTP,但是将TLS延迟到已经链接的外部库)。