1Panel
1Panel copied to clipboard
[QUESTION] 关于面板启用 HTTPS/CDN 访问
1Panel 版本
v1.8.3
请描述您的问题
- 当面板启用了域名绑定和 SSL 访问后, 可以通过
https://domain:port访问, 但如果该域名绑定了 CDN 等服务, 就只能通过https://domain访问, 此时就需要手动在站点配置中增加用于反代面板的站点, 但如果面板设置里启用了域名绑定和 SSL 访问的同时, 又手动配置了面板的反代站点, 那么该反代站点配置将无效, 只能通过https:///domain:port访问, 也就是说两种方法无法共存且面板配置优先级更高, 那么是否可以在绑定了域名 (假设此域名只用来绑定面板) 并且启用 SSL 的时候, 面板可以利用已在面板安全中设置的绑定域名和 SSL 证书来自动添加或手动点击启用的方式来添加一个反代服务来覆盖优先级,以通过https://domain访问面板. - 当面板启用了域名绑定和 SSL 访问后, 访问
https://ip:panel-port的时候, #849 引入的防止源站 ip 泄露的安全配置将无效 (如果端口处于开放), 会在暴露面板域名证书和提示证书不安全后, 可通过高级访问进入面板禁止 ip 访问的限制提示页, 造成源站 ip 泄露, 但如果是通过 HTTPS 反代的方式访问面板, 就可以避免. - 上述问题 2 在绑定默认站点的时候也会遇到, 当绑定了默认站点后, 所有未指向性的域名和 ip 都会指向默认站点, 此时访问
https://origin-server-ip也会同样指向绑定的默认站点, 而不是拒绝握手, 造成源站 ip 泄露. 而如果不进行默认站点配置, 则会完美生效达成『防止恶意解析和源站 ip 泄露』, 因为所有未指向性的域名和 ip 的 HTTPS 访问都被拒绝了.
感谢您的反馈,我们将会在近期版本优化上述问题。
这个可能可以通过修改 TLSConfig 的 GetCertificate 实现,检查 tls.ClientHelloInfo 的 ServerName 如果不在自定义证书的“使用者可选名称”里,那么就返回localhost证书或者抛出错误结束连接。
但需要有个特殊条件,证书可选名称里如果有IP,而 ServerName 是空的,那也不能阻止
@wanghe-fit2cloud 我直接给个实现方法,可以直接让后端读取证书支持哪些地址,从而决定给未知servername返回localhost证书
(以下是我自己写go程序的时候弄的,只截了一部分,直接粘贴肯定跑不起来)
从原理上讲,这个问题与另一个问题不是同一个问题,但可以被同时解决
https://github.com/1Panel-dev/1Panel/discussions/5113