Web 认证弹出 2 个页面
Web 认证弹出 2 个页面
问题现象
用户配置了防火墙 Web 认证,用户与用户组配置如下,认证相关配置(
config user setting)均为默认配置,使用上网的防火墙策略引用用户组。config user local edit "user1" set type password set passwd xxxxxx next end config user group edit "Auth_Users" set member "user1" next end config user setting end config firewall policy edit 1 set name "LAN_to_Internet" set srcintf "internal5" set dstintf "wan1" set action accept set srcaddr "all" set dstaddr "all" set schedule "always" set service "ALL" set nat enable set groups "Auth_Users" next end内网 PC 使用浏览器(以 Chrome 为例)以 HTTPS 的 URL 格式访问 Internet 网站(例如
https://handbook.fortinet.com.cn)时,会弹出 2 个页面,1 个页面提示“连接到网络”,另一个为防火墙认证页面(理论上只应弹出认证页面)。重要
由于浏览器可能有历史记录的原因,即使输入的是
handbook.fortinet.com.cn,浏览器也可能会自动替换为https://handbook.fortinet.com.cn。
问题原因
通过抓包发现,PC 浏览器(Chrome)每次访问
https://handbook.fortinet.com.cn,不只会请求访问的域名handbook.fortinet.com.cn的 IP 地址,同时会请求www.gstatic.com的 IP 地址(抓包文件请参考:auth_dns.pcapng)。
此后 PC 浏览器会分发起 2 个 HTTP 请求:
访问
https://handbook.fortinet.com.cn,由于 FortiGate 开启了防火墙认证,FortiGate 会拦截 PC 的对该网站的访问,并使用相同的 HTTPS 返回自签名的证书,默认情况下该证书不受 PC 信任,浏览器向服务器返回了“Certificate Unknown”的告警信息(抓包文件请参考:auth_to_handbook.pcapng))。

访问
http://www.gstatic.com/generate_204,由于 FortiGate 开启了防火墙认证,FortiGate 会拦截 PC 的对/generate_204网页的访问请求,并使用 HTTP 协议返回 HTTP 200 OK,其中携带需要重定向的认证页面(通过 JS 脚本的方式进行重定向,此例中重定向的 URL 为http://10.10.12.1:1000/fgtauth?050f0b9d48e81e12,抓包文件请参考:auth_to_gstatic.pcapng)。重要
Chrome 浏览器在访问网页时会同时使用
http://www.gstatic.com/generate_204来确认浏览器是否可以访问 Internet。
PC 浏览器使用返回的 HTTP 200 OK 中的重定向地址
http://10.10.12.1:1000/fgtauth?050f0b9d48e81e12打开 FortiGate 的认证页面(抓包文件请参考:auth_to_authserver.pcapng)。
所以 PC 需要认证时,访问网页会打开 2 个页面。
解决方法
在用户认证配置中,使用 FortiGate 的自签名 CA 证书
Fortinet_CA_SSL(默认没有指定证书,总是使用 HTTP Portal 进行认证),强制使用 HTTPS Portal 进行认证。重要
也可以使用其他证书颁发机构(如用户自建 CA)颁发的 Sub CA,需携带私钥导入 FortiGate(导入步骤请参考 系统管理 → 系统设置 → 证书管理的“本地 CA 证书”部分)。
config user setting set auth-ca-cert "Fortinet_CA_SSL" end(可选)使用 IP 或域名作为认证的 Portal(使用域名时,DNS 需要能够解析该域名)。此步可以不配置,默认使用需要认证的流量的入接口 IP 地址作为 Portal 页面的 IP。
config firewall auth-portal set portal-addr "fgt.portal.com" end从 FortiGate 管理页面的“系统管理 → 证书”页面中的“本地 CA 证书”中,右键点击并下载
Fortinet_CA_SSL证书。
在 PC 上信任该 CA 证书(具体证书信任步骤请参考 系统管理 → 管理方式 → 消除 Web 证书告警的“导入和信任 CA 证书部分”)。
Windows:将 CA 证书导入 PC 的“受信任的根证书颁发机构中”。

MacOS:在“钥匙串访问”中信任该证书。

再次使用 PC 访问
https://handbook.fortinet.com.cn,只会弹出 1 个 HTTPS 认证页面,且不会提示网站不安全。
查看该认证页面证书内容,可以看到是由 CA 证书 Fortinet_CA_SSL 签发的证书,CN 为需要认证流量的入接口地址(如果第 2 步中配置了 Portal 域名,则这里的 CN 为对应域名)。
