使用雷池社区版时,当域名为 IP 时,站点返回了错误的证书
当域名为 IP 时,站点返回了错误的证书
当雷池的站点域名配置了 ip 且端口勾选了 SSL 之后,访问该站点,会发现有个奇怪的现象,站点怎么返回的不会配置的证书,而是雷池的默认证书
站点配置
返回的证书
现象说明
由于 TLS 在 HTTP 之前,即在服务端读取到 HTTP 中的 Host 信息时,TLS 握手已经完成,客户端已经获取到了服务端返回的证书。服务端无法根据客户端的 HTTP 内容来返回指定的证书。
那么为什么填域名就可以拿到配置的证书,但是配置 IP 不行呢?
TLS 握手中的第一阶段(client hello)中,客户端会发送 SNI 给服务端,服务端会根据 SNI 来查找到对应的证书。但是 IP 地址在 SNI 中是不支持的,所以当以 IP 地址去请求站点时,client hello 就不会设置 SNI 字段,导致雷池无法获取到正确的证书信息。
IP 访问既然无法获取到正确的证书信息,为什么会是默认的证书呢?
其实这也是一个巧合,当请求中没有 SNI 时,tengine 站点配置了 default_server 的站点的优先级是最高的,当相同端口没有默认站点时(即域名配置为*的站点),雷池会默认创建一个 404 的默认站点(配置在安装目录/resources/nginx/sites-enabled/IF_backend_not_found
),该站点会使用雷池默认的证书。当站点配置有默认站点时,返回的就会是该默认站点的证书了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构