Web认证弹出2个页面

问题现象

  1. 用户配置了防火墙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
    
  2. 内网PC使用浏览器(以Chrome为例)以HTTPS的URL格式访问Internet网站(例如https://handbook.fortinet.com.cn)时,会弹出2个页面,1个页面提示“连接到网络”,另一个为防火墙认证页面(理论上只应弹出认证页面)。

    由于浏览器可能有历史记录的原因,即使输入的是handbook.fortinet.com.cn,浏览器也可能会自动替换为https://handbook.fortinet.com.cn

    image-20240426162444185

问题原因

  1. 通过抓包发现,PC浏览器(Chrome)每次访问https://handbook.fortinet.com.cn,不只会请求访问的域名handbook.fortinet.com.cn的IP地址,同时会请求www.gstatic.com的IP地址(抓包文件请参考:auth_dns.pcapng)。

image-20240426180238958

  1. 此后PC浏览器会分发起2个HTTP请求:

    • 访问https://handbook.fortinet.com.cn,由于FortiGate开启了防火墙认证,FortiGate会拦截PC的对该网站的访问,并使用相同的HTTPS返回自签名的证书,默认情况下该证书不受PC信任,浏览器向服务器返回了“Certificate Unknown”的告警信息(抓包文件请参考:auth_to_handbook.pcapng))。

      image-20240428110048287

      image-20240428111113943

    • 访问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。

      image-20240428111438783

  2. PC浏览器使用返回的HTTP 200 OK中的重定向地址http://10.10.12.1:1000/fgtauth?050f0b9d48e81e12打开FortiGate的认证页面(抓包文件请参考:auth_to_authserver.pcapng)。

    image-20240428113029306

  3. 所以PC需要认证时,访问网页会打开2个页面。

解决方法

  1. 在用户认证配置中,使用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
    
  2. (可选)使用IP或域名作为认证的Portal(使用域名时,DNS需要能够解析该域名)。此步可以不配置,默认使用需要认证的流量的入接口IP地址作为Portal页面的IP。

    config firewall auth-portal
        set portal-addr "fgt.portal.com"
    end
    
  3. 从FortiGate管理页面的“系统管理→证书”页面中的“本地CA证书”中,右键点击并下载Fortinet_CA_SSL证书。

    image-20240428141541585

  4. 在PC上信任该CA证书(具体证书信任步骤请参考系统管理→管理方式→消除Web证书告警的“导入和信任CA证书部分”)。

    • Windows:将CA证书导入PC的“受信任的根证书颁发机构中”。

      image-20240428141903083

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

      image-20240428142434970

  5. 再次使用PC访问https://handbook.fortinet.com.cn,只会弹出1个HTTPS认证页面,且不会提示网站不安全。

    image-20240428142956113

  6. 查看该认证页面证书内容,可以看到是由CA证书Fortinet_CA_SSL签发的证书,CN为需要认证流量的入接口地址(如果第2步中配置了Portal域名,则这里的CN为对应域名)。

    image-20240428143053813

Copyright © 2024 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2024-04-28 17:31:01

results matching ""

    No results matching ""