我玩弄了 nginx 和双向 TLS 身份验证。为此,我将 nginx 服务器配置为使用 config 参数实际使用客户端身份验证:
ssl_verify_client on;
它有效,但我对终止过程有疑问。
如果我向例如 https://localhost 发出 get 请求并ssl_verify_client on;
已设置,即使我没有提供有效的客户端证书,我也会收到 http 响应:
400 Bad Request 未发送所需的 SSL 证书
对我来说,TLS 连接在 TLS 握手时终止是有道理的。当连接未相互验证时,为什么我会收到 http 响应?
我还阅读了 RFC 5246,它基本上说可以这样做(设计师选择):
然而,TLS 标准并没有指定协议如何通过 TLS 增加安全性。关于如何启动 TLS 握手以及如何解释交换的身份验证证书的决定留给了在 TLS 之上运行的协议的设计者和实现者的判断。
在应用层而不是传输层上做这件事有很好的论据吗?是否有可能在不使用代理(例如 HAProxy)的情况下提前终止 TLS 连接?