www.SAMURAJ-cz.com 

25.04.2024 Marek Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

FortiGate autentizace certifikátem do SSL VPN

Úterý, 21.04.2020 07:38 | Samuraj - Petr Bouška |
Minule jsme si popsali uživatelské účty na FortiGate a ověření lokálně či vůči vzdáleným serverům (LDAP). Dnes se podíváme na možnosti vícefaktorové autentizace (MFA). Speciálně využití digitálního certifikátu pro přihlášení do SSL VPN. Ukážeme si, jak můžeme využít běžnější uživatelský, ale také počítačový certifikát.

Pozn.: Popis v článku vychází z FortiGate FG-300E s FortiOS verzí 6.2.3. Který je nakonfigurovaný jako FGCP cluster a využívá VDOM.

SSL VPN vyžadování klientského certifikátu

Standardně se uživatelé ověřují zadáním jména a hesla. Mohou být definováni lokálně nebo vzdáleně. Speciální případ jsou lokální Peer (PKI) users, kteří se ověřují klientským digitálním certifikátem. Mohou se autentizovat pouze certifikátem nebo dvoufaktorově včetně zadání hesla. V případě SSL VPN můžeme vyžadovat ověření certifikátu pro všechny uživatele (jedno, kde jsou definováni).

  • (VDOM) > SSL > SSL-VPN Settings

Při přihlašování do SSL VPN můžeme v GUI zapnout vyžadování klientského certifikátu (Require Client Certificate). Pokud pouze zapneme tuto volbu, tak se akceptují všechny certifikáty, které jsou pro FortiGate důvěryhodné. Přesné chování můžeme ovlivnit globálním nastavením VPN certifikátů (viz. dále). Použitím CLI můžeme přiřadit PKI uživatele (Peer User) a v tomto objektu definovat detaily certifikátu, který se akceptuje.

FortiGate SSL-VPN Settings - Require Client Certificate

Zapnout ověření klientského certifikátu můžeme v globálním nastavení SSL VPN (SSL-VPN Settings). Pak všechna připojení (portály) budou vyžadovat certifikát klienta. Nebo můžeme nastavit pomocí CLI v autentizačním pravidle, kde mapujeme uživatele na portál. Pak se projeví pouze pro připojení na daný portál a daného uživatele.

Pokud nastavíme vyžadování certifikátu v globálním nastavení, tak ověření probíhá hned v úvodní fázi, kdy se navazuje TLS spojení. V případě, že neprojde certifikát, tak se ani neověřuje uživatel. Při nastavení v autentizačním pravidle se musí nejprve zjistit uživatel, abychom věděli, zda je certifikát vyžadován.

Když přistupujeme na Web VPN, tak vyskočí požadavek na certifikát při přístupu na stránku. Certifikát se posílá dříve, než se zobrazí přihlašovací dialog. Pokud jsme nastavili v určitém autentizačním pravidle, tak stejně vyskakuje požadavek všem (kteří se připojují přes stejné URL). Pokud pro naše připojení certifikát vyžadován není, tak dialog můžeme zrušit a pokračovat. Pokud chceme zařídit, aby se požadavek zobrazil pouze tam, kde je certifikát vyžadován, tak můžeme vytvořit různé Realm. Definujeme různá URL (Virtual Host) a každý přiřadíme k jiné skupině pravidel.

Při zapnutém ověřování certifikátu se kontrolují různé vlastnosti certifikátu. Například zda to není Self-signed certifikát, zda je od důvěryhodné autority, může se kontrolovat CRL apod. Některé věci můžeme ovlivnit v nastavení certifikátů (config vpn certificate setting). Pokud máme navíc použité Peer User, tak se hledá, zda certifikát vyhovuje některému z nich.

Pokud při přihlášení nemáme nastavený certifikát, tak se zobrazí chyba.

FortiClient chybějící certifikát

Počítačový certifikát (Computer Certificate)

Běžně Fortinet využívá uživatelský certifikát (User Certificate - certmgr.msc), ale je možno použít i počítačový certifikát (Computer Certificate - certlm.msc) na OS Windows. Pokud má uživatel práva přístupu do počítačového úložiště certifikátů, tak se mu patřičné certifikáty nabízejí při výběru certifikátu ve FortiClient. Patrně jde o certifikáty s Enhanced Key Usage = Client Authentication. Ale když takový certifikát použijeme, tak se do VPN nepřipojíme. Při použití debug se dá zjistit (i když FortiGate je velmi chudý v zobrazení informací), že se certifikát vůbec nepošle na server. Opravdu vtipné chování.

Na fóru jsem našel dotazy lidí, jak použít autentizaci počítačovým certifikátem. A odpovědi, že to nelze. Ale nakonec, skoro náhodou, se mi povedlo nalézt jeden Fortinet článek Technical Tip: How to use machine certificates for SSLVPN connections in FortiClient. A podle něj se opravdu použití počítačového certifikátu jednoduše zprovozní.

FortiClient povolení počítačových certifikátů

Je potřeba změnit nastavení aplikace FortiClient.

  • vytvoříme zálohu nastavení
    • FortiClient - Settings - v části System - Backup
    • třeba do souboru forticlient.conf, potvrdíme OK, dostaneme informaci, že záloha proběhla
  • upravíme konfiguraci
    • konfiguraci otevřeme v textovém editoru a najdeme častí, kde jsou definována naše připojení do VPN
            <connections>
                <connection>
                    <name>Moje VPN připojení</name>

Pozn.: upravit musíme všechna připojení, kde chceme použít počítačový certifikát

    • třeba za část, kde jsou definovány certifikáty, doplníme nový řádek s elementem allow_standard_user_use_system_cert
                    </certificate>
                    <allow_standard_user_use_system_cert>1</allow_standard_user_use_system_cert>
                    <warn_invalid_server_certificate>1</warn_invalid_server_certificate>
    • soubor uložíme
  • obnovíme konfiguraci do FortiClient
    • odemkneme nastavení - vlevo dole (nebo vpravo nahoře) zámek Unlock Settings
    • Settings - Restore - vybereme soubor a potvrdíme

Peer User (PKI uživatel)

PKI uživatele můžeme použít řadou způsobů. Můžeme pomocí něj vytvořit lokálního uživatele s definicí certifikátu (která určuje přímo jeden certifikát) i hesla, kterého zařadíme do skupiny a tu použijeme do VPN. SSL VPN with certificate authentication

Nebo tento objekt můžeme použít k definici všech certifikátů, které se akceptují pro ověření do SSL VPN. A následně ověříme uživatele na vzdáleném serveru (LDAP). Technical Tip: RADIUS authentication and client certificates in SSL VPN. Pak tohoto uživatele přiřadíme v konfiguraci SSL VPN nastavení příkazem set user-peer {string}

Pokud ověřujeme uživatele na LDAP serveru, tak můžeme nastavit přihlášení pouze certifikátem, bez zadávání jména a hesla. Ze Subject certifikátu se vezme User Principal Name a podle něj se hledá uživatel. SSL VPN with LDAP-integrated certificate authentication

Vytvoření Peer (PKI) User

Dokumentace user peer, Technical Tip: PKI peer user creation for certificate authentication

PKI uživatele musíme vytvořit pomocí CLI a minimálně musíme určit CA z které je certifikát vydán.

config user peer
    edit "certuser"
        set ca "Moje_Root_Authority"
    next
end
  • (VDOM) > User & Device > PKI

Ale jakmile vytvoříme prvního uživatele v CLI, tak se v GUI zobrazí možnost editace a přidání dalších. Ovšem CLI nabízí více množností nastavení.

Parametry Peer (PKI) User

PKI uživateli můžeme nastavit pouze určitou certifikační autoritu a pak budou akceptovány všechny certifikáty od ní. V praxi jsem měl problém (který jsem dále nezkoumal). Pokud máme dvoustupňovou hierarchii CA, tedy kořenovou autoritu (Root CA) a podřízenou (Intermediate CA), která vydává certifikáty. Když jsem do PKI uživatele nastavil Intermediate CA (která se zobrazuje na klientovi při výběru certifikátu), tak ověření neprošlo. Když jsem změnil na Root CA, tak začalo fungovat.

Pro další upřesnění můžeme určit, co se má nacházet v položce Subject certifikátu. Případně přímo v atributu CN (Common Name) položky Subject. Ve výchozím nastavení se hledá podřetězec (substring), tedy pokud se zadaný řetězec nachází uvnitř položky Subject nebo CN, tak se bere jako odpovídající.

Můžeme použít třeba název domény a akceptovat se budou všechny uživatelské certifikáty, kde je emailová adresa s danou doménou. Nebo počítačové certifikáty, kde je DNS jméno počítače s touto doménou. Pro upřesnění můžeme začít znakem zavináč, respektive tečka. Případně můžeme zadávat detailněji definované atributy v položce Subject.

Různé příklady filtru:

        set subject ".firma.local"
        set subject "@firma.cz"
        set subject "OU = firma.cz"
        set subject "CN = Bouška Petr"
        set subject "bouska@firma.cz"
        set subject "bouska-win10.firma.local"
        set subject "CN = bouska-win10.firma.local"
        set cn ".firma.local"

Pro atribut CN můžeme ještě určit jeho typ string, email, FQDN, ipv4, ipv6.

        set cn-type string

Nastavení VPN certifikátů

Dokumentace vpn certificate setting

Různé způsoby chování, při ověřování certifikátů, můžeme nastavit globálně v nastavení VPN certifikátů. Níže jsou příklady nastavení zajímavých položek včetně výchozích hodnot. Nastavuje se kontrola CA, případně celého řetězce. Jestli se v Subject nebo CN hledá podřetězec (substring) nebo přesná hodnota (value) atributu. Možnost zapnout Strict CRL/OCSP kontrolu.

config vpn certificate setting
    set check-ca-cert enable
    set check-ca-chain disable
    set subject-match substring
    set cn-match substring
    set strict-crl-check disable
    set strict-ocsp-check disable
end

Přiřazení Peer (PKI) User v nastavení VPN

Přiřazení vytvořeného PKI uživatele, a tedy definici povolených certifikátů, spolu se zapnutím vyžadování klientského certifikátu, můžeme nastavit pro všechna připojení v globálním nastavení SSL VPN. Nebo v některém autentizačním pravidle (Authentication/Portal Mapping), kde mapujeme uživatele na portál (případně s určitým Realm) a ovlivní tuto kombinaci připojení. V obou případech musíme nastavit pomocí CLI.

Konfigurace Peer User v globálním nastavení SSL VPN

config vpn ssl settings
    set reqclientcert enable
    set user-peer {string}
end

V globálním nastavení ještě můžeme zapnout vyžadování PKI uživatele s dvoufaktorovou autentizací.

config vpn ssl settings
    set force-two-factor-auth enable
end

Konfigurace Peer User v autentizačním pravidle

config vpn ssl settings
    config authentication-rule
        edit 1
            set client-cert enable
            set user-peer {string}
        next
end

Události při debugování

Pokud zapneme v CLI debug SSL VPN, tak se logují různé události ohledně kontroly certifikátu (ale mohlo by jich být více). Následují příklady různých událostí a vybraných logů.

diagnose debug application sslvpn -1
diagnose debug enable

Je vyžadován certifikát, ale klient žádný nepoužije.

[9315:FWINT:7a2]client cert requirement: yes
[9313:FWINT:7ad]No client certificate
[9313:FWINT:7ad]Require client certificate for bouska
[9313:FWINT:7ad]login_failed:384 user[bouska],auth_type=16 failed [sslvpn_login_cert_checked_error]

Použití Self-signed certifikátu.

[9314:FWINT:74a]client cert requirement: yes 
[9314:FWINT:74a]SSL state:SSLv3/TLS write certificate request (78.248.255.155)
[9314:FWINT:74a]SSL certificate verification: self signed certificate
[9314:FWINT:74a]SSL error: self signed certificate
[9314:FWINT:74a]SSL state:SSLv3/TLS read client certificate (78.248.255.155) [9314:FWINT:74a]doing certificate checking.

Úspěšné použití korektního certifikátu.

[9314:FWINT:74b]client cert requirement: yes
[9314:FWINT:74b]SSL state:SSLv3/TLS write certificate request (78.248.255.155)
[9314:FWINT:74b]SSL state:SSLv3/TLS read client certificate (78.248.255.155)
[9314:FWINT:74b]doing certificate checking.
[9314:FWINT:74b]__auth_cert_cb:903 certificate check OK.

Úspěšné přihlášení s Peer User se jménem certuser.

[9313:FWINT:778]client cert requirement: yes 
[9313:FWINT:778]fam_cert_send_req:808 do certificate peer check first(2).
[9313:FWINT:778]doing certificate checking for 1 peer(s).
[9313:FWINT:778]__auth_cert_cb:903 certificate check OK.
[9313:FWINT:778]__auth_cert_cb:915 certificate check OK, matched peer [certuser].
[9313:FWINT:778]sslvpn_update_user_group_list:1533 Remove user(s) and group(s) do not set matched peer [certuser].
[9313:FWINT:778]sslvpn_update_user_group_list:1537 got user (0:0), group (1:1) peer group (0) after update.
[9313:FWINT:778]sslvpn_authenticate_user:191 authenticate user: [bouska]
[9313:FWINT:778]Auth successful for group G VPN1
[9313:FWINT:778]Auth successful for group [G VPN1] with matched user-peer [certuser]
[9313:FWINT:778]fam_do_cb:654 fnbamd return auth success.

Neúspěšné přihlášení s Peer User.

[9315:FWINT:76e]doing certificate checking for 1 peer(s).
[9315:FWINT:76e]sslvpn_update_user_group_list:1563 Remove group(s) which has set user-peer (1).
[9315:FWINT:76e]sslvpn_update_user_group_list:1595 got user (0:0), group (0:0), peer group (0) after update.
[9315:FWINT:76e]__auth_cert_cb:939 no valid user/group candidate found.
zobrazeno: 9549krát | Komentáře [3]

Autor:

Související články:

Fortinet FortiGate a další

Bezpečnostní řešení firmy Fortinet. Nejvíce zaměřeno na Next Generation Firewall (NGFW) FortiGate.

VPN - Virtual Private Network

Série článků, která obsahuje obecný popis technologie VPN. Rozebírá jednotlivé typy VPN, jako je Site to Site VPN a Remote Access VPN. A popisuje konfigurace na různých zařízeních.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] MH

    Co vlastně znamená "Je vyžadován certifikát, ale klient žádný nepoužije."?

    Neděle, 13.08.2023 14:54 | odpovědět
  2. [2] MH

    Je možné kontrolovat více parametrů v certifikátu než pouze jeden "set subject"? Funguje někomu tato kontrola? Debug log je tak chudý, že se nedá zjistit co vlastně kontroluje a proč to nefunguje :-(:-(:-(

    Neděle, 13.08.2023 15:00 | odpovědět
  3. [3] Samuraj

    odpověď na [1]MH: To je jasně vidět v tom příkladu logu :-). V nastavení VPN na FortiGate je požadováno použití certifikátu (cert requirement: yes), ale v připojení FortiClient žádný nastavený není (No client certificate). Tak se uživatel nepřihlásí.

    Pondělí, 14.08.2023 06:52 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách