Popis situace
Řešíme zde starý FortiGate, který je již z roku 2018. Jedná se o FortiGate-VM64 (model FG-VM00), tedy virtualizovanou verzi. Postupně byl upgradovaný z verze FortiOS 5.6.3 na 7.2.13.
Spolu s dalšími FortiGate je připojen k FortiAnalyzer VM (FAZ). Proběhl standardní upgrade FortiAnalyzer 7.6.4 na FortiAnalyzer 7.6.6. Po upgradu se virtuální FortiGate hlásil na FortiAnalyzer jako Down, ostatní korektně fungovali. Na straně FortiGate byl stav FortiAnalyzer Unauthorized a autorizace neproběhla (FortiAnalyzer informoval, že není žádné zařízení k autorizaci).

Podle FortiAnalyzer Compatibility Tool jsou verze navzájem kompatibilní. Přesto jsem nejprve zkusil upgrade FortiOS na 7.4.11, což situaci nijak nezměnilo. Ověřil jsem, že komunikace je stále funkční a problém se děje při využití UDP i TCP.
Troubleshooting problému spojení
Řešení různých problémů s komunikací mezi FortiGate a FortiAnalyzer je popsáno v Troubleshooting Tip: FortiGate to FortiAnalyzer connectivity. Ale problém popisovaný v tomto článku zde uveden není.
Kontrola konfigurace na FortiGate
Dvě možnosti, jak se podívat na aktuální konfiguraci pomocí CLI.
FW1 # config log fortianalyzer setting FW1 (setting) # show config log fortianalyzer setting set status enable set server "192.168.251.50" set serial "FAZ-VMXXXXXXXX" set source-ip "192.168.251.100" set upload-option realtime set reliable enable end FW1 # get log fortianalyzer setting status : enable ips-archive : enable server : 192.168.251.50 alt-server : fallback-to-primary : enable certificate-verification: enable serial : "FAZ-VMXXXXXXXX" server-cert-ca : preshared-key : access-config : enable enc-algorithm : high ssl-min-proto-version: default conn-timeout : 10 monitor-keepalive-period: 5 monitor-failure-retry-period: 5 certificate : source-ip : 192.168.251.100 interface-select-method: auto upload-option : realtime reliable : enable priority : default max-log-rate : 0
Test spojení
Test spojení z FortiGate na FortiAnalyzer ukazuje pouze, že je problém s autentizací.
FW1 # execute log fortianalyzer test-connectivity Failed to get FAZ's status. Authentication Failed. (-19)
Debug FortiAnalyzer
Připojíme se na CLI FortiAnalyzer a spustíme debug. Ideální je ukládat výstup do souboru, protože se může logovat řada informací. V PuTTY jde o standardní nastavení, Fortinet má návod Technical Tip: How to create a log file of a session using PuTTY .
Debug OFTP zde spouštíme s filtrem na IP adresu FortiGate (můžeme i bez zadání adresy).
diagnose debug application oftpd 8 192.168.251.100 diagnose debug enable
Pro vypnutí debugování použijeme.
diagnose debug disable
V logu najdeme některý začátek komunikace našeho FortiGate zařízení. Je zajímavé si všimnout dvou fází, které probíhají. Nejprve se navazuje SSL spojení, kdy se ověřuje certifikát FortiGate (a jeho CA). Standardně je vystaven od Fortinet. Po navázání spojení se do logu uloží různé informace o FortiGate. Níže je pár vybraných událostí.
[T4937:oftps.c:2148 :192.168.251.100] SSL clienthello incoming on sockfd[18] [T4937:oftps.c:1465] -- SSL server got SNI: 'fortinet-ca2.fortinet.com', SSL_CTX located: 0x5578491b5bf0, idx=0 [T4937:oftps.c:598] VERIFY OK: depth=2, /C=US/ST=California/L=Sunnyvale/O=Fortinet/OU=Certificate Authority/CN=fortinet-ca2/emailAddress=support@fortinet.com [T4937:oftps.c:598] VERIFY OK: depth=1, /C=US/ST=California/L=Sunnyvale/O=Fortinet/OU=Certificate Authority/CN=fortinet-subca2001/emailAddress=support@fortinet.com [T4937:oftps.c:598] VERIFY OK: depth=0, /C=US/ST=California/L=Sunnyvale/O=Fortinet/OU=FortiGate/CN=FortiGate/emailAddress=support@fortinet.com [T4937:oftps.c:1804 :192.168.251.100] ssl verify peer cert [T4937:oftps.c:1826 :192.168.251.100] Peer is using a fortinet certificate. ON=Fortinet [T4937:oftps.c:1839 :192.168.251.100] Peer cert info, CommonName(CN=FortiGate). [T4937:oftps.c:2160 :192.168.251.100] SSL_accept one client SUCCESS [ protocol : (772) TLS 1.3 ] [T4939:login.c:3443 :192.168.251.100] host = 'FW1' [T4939:login.c:3489 :192.168.251.100] Version: FortiGate-VM64 v7.4.11,build2878,260126 (GA.M)
V druhém korku probíhá ověření FortiGate. Zde se zalogovala chyba, která napoví více o aktuálním problému.
[T4938:login.c:4129 :192.168.251.100] Error No legal SN found in cert and legacy auth mode disabled [T4938:main.c:4927 :192.168.251.100] LOGIN_REQUEST_LEGACY error: [handle_login_legacy():4199] invalid device id
Debug FortiGate
Můžeme provést degug i na straně FortiGate, ale zde chyba neposkytne příliš informací.
diagnose debug app fgtlogd 255 diagnose debug app miglogd 255 diagnose debug enable <4871> __on_connect()-1753: oftp_connect(global-faz) failed: oftp failed to authenticate.
Problém autentizace FortiGate na FortiAnalyzer
Podle chyby No legal SN found in cert and legacy auth mode disabled můžeme rychle nalézt článek Technical Tip: FortiAnalyzer rejects the FGFM/OFTP connection attempts.
Příčina problému
FortiGate komunikuje s FortiAnalyzer pomocí OFTP protokolu (Optimized Fabric Transfer Protocol) na UDP nebo TCP portu 514. FortiAnalyzer nově vynucuje autentizaci certifikátem a ověřuje, zda pole Common Name (CN) obsahuje sériové číslo (SN) zařízení. Dříve se používalo ověření jménem a heslem.
Pozn.: Nenalezl jsem nikde v dokumentaci, kdy k této změně došlo. Čekal bych, že se na to bude upozorňovat v Release Notes a What’s New. Ve verzi FortiAnalyzer 7.6.4 jsem tento problém ještě neměl.
Kontrola certifikátu
Jako výchozí se pro připojení na FortiAnalyzer používá (vestavěný tovární) certifikát Fortinet_Factory. V mém případě obsahovalo CN text FortiGate místo sériového čísla zařízení.
Informace o certifikátu nalezneme v GUI.
- (Global/VDOM) - System - Certificates (Local Certificate)

Nebo pomocí CLI.
get vpn certificate local details
Možná řešení problému autentizace na FortiAnalyzer
Je několik možností, jak vyřešit autentizaci a opět zprovoznit komunikaci FortiGate na FortiAnalyzer.
Povolení staršího režimu ověřování
V několika článcích je popisováno následující řešení. Povolit Legacy Authentication na FortiAnalyzer pomocí nově přidaného příkazu. Podle informací je často toto řešení potřeba použít pro připojení FortiWeb, FortiMail nebo FortiADC.
config system log settings set legacy-auth-mode enable end
Během krátké doby po povolení staršího ověřování se FortiGate připojil a logy se začaly přenášet.
Přegenerování továrního certifikátu
S problémem jsem se obrátil na Fortinet Support. Jejich stručná odpověď byla, že na standardních VM zařízeních je možno znovu vygenerovat certifikát se sériovým číslem zařízení. V některých případech to nemusí být možné, pak je potřeba použít alternativní (vlastní) certifikát.
Znovu jsem hledal na internetu a našel článek uvedený výše. Řeší jinou situaci, ale stejný problém s certifikátem. Pomocí příkazu, který stáhne licenci z internetu (z FortiCare), má dojít také k vygenerování nového certifikátu. Méně příjemné je, že dojde k restartu FortiGate.
FW1 # execute vm-license FGVMXXXXXXXX This operation will reboot the system ! Do you want to continue? (y/n)
Zadáváme VM License Token, což je sériové číslo zařízení (v příkladu FGVMXXXXXXXX). Vidíme jej v GUI nebo můžeme zobrazit více způsoby v CLI.
FW1 # get system status | grep "Serial-Number" Serial-Number: FGVMXXXXXXXX FW1 # diagnose debug vm-print-license SerialNumber: FGVMXXXXXXXX
Použití alternativního certifikátu
- Technical Tip: How to use an alternate server certificate for OFTP communication between FortiGate and FortiAnalyzer
- Technical Tip: Setup custom certificate for FGFM protocol
Pro některé situace je nejlepší možnost použít vlastní certifikát. V tomto případě není potřeba restart FortiGate. Fortinet bohužel nemá žádný popis, který by se věnoval nastavení certifikátu na FortiGate pro OFTP autentizaci na FortiAnalyzer. Výše uvedené články popisují jiné situace. Zkusil jsem intuitivní postup, který se nakonec (po problémech s typem certifikátu) ukázal jako funkční a je popsán níže.
Kroky nastavení vlastního certifikátu pro komunikaci FortiGate na FortiAnalyzer
- vystavit certifikát od vlastní CA
- nahrát certifikáty CA na FortiGate i FortiAnalyzer
- importovat vystavený certifikát s privátním klíčem na FortiGate
- nastavit tento certifikát na FortiGate pro připojení na FortiAnalyzer
Problém se špatným certifikátem
Na začátek upozorním na možný problém s certifikátem (i když je to logické, tak mne to nenapadlo). Provedl jsem popsané kroky, certifikát vystavil jako Web Server Certificate. Ale připojení na FortiAnalyzer stále nefungovalo. Debug na FortiAnalyzer logoval následující události, kde je vidět, že se nenavázalo SSL spojení.
[T4939:oftps.c:2148 :192.168.251.100] SSL clienthello incoming on sockfd[18] [T4939:oftps.c:1436 :192.168.251.100] dft-idx=0 inited=1. [T4939:oftps.c:1927 :192.168.251.100] SSL socket[18] pid[1685] ssl[0x7f95400681b0] SSL_new() success. [T4937:oftps.c:2189 :192.168.251.100] SSL accept failed. SSL_accept()=-1 SSL_get_error()=5 [T4937:oftps.c:2342 :192.168.251.100] SSL pid[1685] ssl[0x7f95400681b0] shuting down sockfd[18] ip[192.168.251.100] connected[1] [T4937:oftps.c:2355 :192.168.251.100] SSL_shutdown Error. SSL_get_error[1]
Nepovedlo se mi k chybě nic nalézt, ale poradili na Fortinet Supportu, odkud mi poslali odkaz na výše uvedený článek.
Certifikát musí mít Enhanced Key Usage účel Client Authentication. Je zajímavé, že ve vlastnostech certifikátu Fortinet_Factory tento účel nevidím. Ale při použití OpenSSL se informace zobrazí.
c:\> openssl x509 -noout -text -purpose -in Fortinet_Factory.cer ... Certificate purposes: SSL client : Yes SSL client CA : No SSL server : Yes SSL server CA : No
Musel jsem tedy na certifikační autoritě vystavit nový certifikát. V případě MS CA je možno použít třeba šablonu Computer. Ideálně vytvoříme kopii, kterou upravíme. S tímto certifikátem, již připojení fungovalo.
Import certifikátů na FortiAnalyzer
- System Settings - Certificates - Create New/Import - CA Certificate
Nahrajeme certifikát(y) certifikační autority.
Import certifikátů na FortiGate
- (Global/VDOM) - System - Certificates - Create/Import - CA Certificate
Nahrajeme certifikát(y) certifikační autority.
- (Global/VDOM) - System - Certificates - Create/Import - Certificate
Nahrajeme vystavený certifikát s privátním klíčem (například v PFX), který musí mít v Subject v Common Name sériové číslo FortiGate. Musí mít účel Client Authentication. Certifikátu nastavíme určité jméno.
Nastavení certifikátu na FortiGate
V konfiguraci zadáme jméno našeho certifikátu a ten se začne využívat pro připojení i autentizaci na FortiAnalyzer.
FW1 # config log fortianalyzer setting FW1 (setting) # set certificate OFTP_authentication FW1 (setting) # end In order to verify identity of FortiAnalyzer serial number is needed. If serial number is not set, connection will be set as unverified and access to local config and files will be accessible only with user name/password. FortiGate can establish a connection to obtain the serial number now.Do you want to try to connect now? (y/n)y Obtained serial number from X509 certificate of Fortianalyzer is: FAZ-VMXXXXXXXX Serial number from certificate MUST be the same as serial number observed in Fortianalyzer. If these two serial numbers don't match, connection will be dropped. Please make sure the serial numbers are matching. In case that Fortianalyzer is using a third-party certificate, certificate verification must be disabled. Do you confirm that this is the correct serial number? (y/n)y serial to be set:FAZ-VMXXXXXXXX
Hi Petr,
great job here, this article is excellent.
I ran into this exact issue today, now it's working correctly using the Legacy Authentication method. I tried using an alternative cert but my FAZ didn't like it for some reason... Funnily the authentication showed VERIFY OK on CA and FG certs, but at a latter stage I got:
[handle_login_legacy:3641 10.55.126.254] Error No legal SN found in cert and legacy auth mode disabled
[__helper_thr_run_task:3986 10.55.126.254] LOGIN_REQUEST_LEGACY error: [oftp_get_opt_timezone():2789] timezone parse error: GMTa-1
Of course, the SN is shown in the CN field and the timezone... it is just correctly set on both sides.
Anyway, no custom cert but my setup is working now, so... Kudos to you! :)