在监听 443 端口的 nginx 服务器块上禁用 SSL

在监听 443 端口的 nginx 服务器块上禁用 SSL

是否可以设置一个服务器,它在监听端口 443 时不使用它?

类似这样的:

server {
  listen 443;
  server_name  _;
  ssl off;
  return 444;
}

上述代码的问题是 nginx 强制在此块上使用 SSL(忽略ssl off)并因缺少证书而失败。

有些人可能想知道为什么?但请将此视为我的一个学术问题:)

答案1

RFC 2818指出 HTTP/HTTPS 之间的端口分离来自于发送的第一个数据不同的事实,因为 HTTPS 在通过它发送 HTTP 之前启动 TLS 会话。

如果您没有使用正确的协议,服务器就无法理解您。

而且,RFC 7230,更新了前一个,指出:

如果端口子组件为空或未给出,则 TCP 端口 443 是默认端口,并且用户代理必须确保在发送第一个 HTTP 请求之前,通过使用强加密(端到端)来保护其与原始服务器的连接。

因此,在传输到 TCP 443 端口之前对内容进行加密是 RFC 的要求。这是无法避免的。

提出这一要求的原因是为了强制分离 OSI 层,TLS(SSL)位于第 5 层,HTTP 位于第 7 层。它们无法相互理解。这反映在软件中,这些部分的处理通常由不同的代码段完成(nginx 处理 HTTP,但将 TLS 推迟到与之链接的外部库)。

相关内容