在 Google App Engine 中,当 isSecure() 返回 false 时,ServletRequest 上的 getScheme() 是否可以返回“https”?”
这是 this 的后续问题.
最佳答案
我认为这个问题缺少您在另一个问题上添加的一些上下文,因为您担心的似乎是证书错误,我认为合适的答案是:
是 getScheme() 即使在证书错误的情况下也会返回 https,但前提是(当然)客户端选择接受有错误(不受信任、过期等)的服务器证书在 SSL 握手期间。例如,客户端可能使用了curl -k
标志。
在您原来的问题中,您提到:
[if getScheme() returns "https"] is it guaranteed that a HTTPS connection has been established and there were no certificate errors?
我认为您的问题中有一个有缺陷的假设,即证书错误意味着未建立 HTTPS 连接。如果出现证书错误(不受信任的颁发者、过期的证书等),有两种可能性:
- 客户端终止 SSL 握手(不会有任何请求到达并由您的应用程序处理)。
- 客户端已明确选择信任此证书,或者选择忽略过期的证书和其他错误 (
curl -k
)。在这种情况下,将建立 https 连接并且请求将继续。您的应用当然会看到 getScheme() 返回的“https”,因为 https 连接已建立。但从客户端的角度来看,这可能不是一个值得信赖的连接。
关于java - 在 Google App Engine 中,当 isSecure() 返回 false 时,ServletRequest 上的 getScheme() 是否可以返回 "https"?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148119/