Příklad zásady mTLS
| Akce | Typ pravidla | Selektor | Hodnota |
|---|---|---|---|
| Service Auth | Include | Obecný název | John Doe |
← Cloudflare One / cloudflare-one / access-controls / service-credentials
Ověřování Mutual TLS (mTLS) ↗ vyžaduje, aby klient i server během handshake TLS předložili certifikáty. V implementaci Cloudflare Access se nahraná CA používá k ověření klientského certifikátu (ověření serverového certifikátu zajišťuje standardní TLS). Access mTLS slouží dvěma účelům:
Když do Access nahrajete kořenovou certifikační autoritu (CA), projdou pouze požadavky ze zařízení s odpovídajícím klientským certifikátem. Jakmile požadavek dorazí k aplikaci, Access vyzve klienta k předložení certifikátu. Pokud klient nemůže předložit platný certifikát, je požadavek zablokován. Pokud klient předloží platný certifikát, Access dokončí výměnu klíčů za účelem ověření.
Certifikát CA může pocházet od veřejně důvěryhodné CA nebo být self-signed.
V certifikátu Basic Constraints, atribut CA musí být nastaven na TRUE.
Certifikát musí používat jeden z níže uvedených podpisových algoritmů:
Povolené algoritmy podpisu
x509.SHA1WithRSA
x509.SHA256WithRSA
x509.SHA384WithRSA
x509.SHA512WithRSA
x509.ECDSAWithSHA1
x509.ECDSAWithSHA256
x509.ECDSAWithSHA384
x509.ECDSAWithSHA512
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Přihlašovací údaje služby > Mutual TLS.
Vyberte Add mTLS Certificate.
Zadejte libovolný název kořenové CA.
V Obsah certifikátu, vložte obsah vaší kořenové CA.
Pokud je klientský certifikát podepsán přímo kořenovou CA, stačí nahrát pouze kořenový certifikát. Pokud je klientský certifikát podepsán mezilehlým certifikátem, musíte nahrát celý řetězec CA (mezilehlý i kořenový certifikát). Například:
-----BEGIN CERTIFICATE-----
<intermediate.pem>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<rootCA.pem>
-----END CERTIFICATE-----Nezahrnujte žádné serverové certifikáty SSL/TLS. Access k ověření připojení mezi zařízením uživatele a Cloudflare používá pouze řetěz CA.
V Přiřazené hostname, zadejte plně kvalifikované názvy domén (FQDN), které budou tento certifikát používat.
Tyto FQDN budou hostitelské názvy použité pro prostředky chráněné v Zásada Access. Kořenovou CA musíte přiřadit k FQDN, které používá chráněná aplikace.
Uložte zásadu.
Přejděte na Řízení přístupu > Zásady.
Vytvořit zásadu Access pomocí jednoho z následujících selektory:
Pokud je to pro klienta, který se nepotřebuje přihlašovat přes IdP, nastavte zásadu Akce na Service Auth.
Příklad zásady mTLS
| Akce | Typ pravidla | Selektor | Hodnota |
|---|---|---|---|
| Service Auth | Include | Obecný název | John Doe |
Uložte zásadu a poté přejděte na Řízení přístupu > Aplikace.
Vyberte aplikaci, na které chcete vynutit mTLS, a vyberte Konfigurovat. Aplikace musí být zahrnuta v Přiřazené hostname seznam z kroku 5.
V Zásady kartě přidejte zásadu mTLS.
Uložte aplikaci.
K aplikaci se nyní můžete ověřit pomocí klientského certifikátu. Postup předložení klientského certifikátu najdete v Testování mTLS.
Testování aplikace chráněné zásadou mTLS:
Nejprve zkuste načíst web příkazem curl bez klientského certifikátu.
Tento příklad příkazu curl platí pro web example.com která má Aplikace a zásada Access nastavena pro https://auth.example.com:
curl -sv https://auth.example.comBez klientského certifikátu v požadavku 403 forbidden se zobrazí odpověď a stránka není dostupná.
Nyní do požadavku přidejte svůj klientský certifikát a klíč:
curl -sv https://auth.example.com --cert example.pem --key key.pemPo úspěšném dokončení procesu autentizace se zobrazí CF_Authorization Set-Cookie hlavička se vrátí v odpovědi.
Pro přístup k aplikaci chráněné mTLS v prohlížeči musí být klientský certifikát importován do správce certifikátů prohlížeče. Postup se liší podle prohlížeče. Prohlížeč může používat kořenové úložiště operačního systému nebo své vlastní interní důvěryhodné úložiště.
Následující příklad ukazuje, jak přidat klientský certifikát do systémového keychainu macOS:
client.pem soubor v Keychain Access. Pokud budete vyzváni, zadejte své lokální heslo.Pokud váš prohlížeč používá systémové úložiště macOS, můžete se nyní přes prohlížeč připojit k aplikaci mTLS.
K generování certifikátů pro testování funkce mTLS v Cloudflare Access můžete použít open source nástroje pro infrastrukturu soukromých klíčů (PKI).
Tato část se zabývá tím, jak používat OpenSSL ↗ a vygenerovat kořenový a mezilehlý certifikát a poté vydat klientské certifikáty, které se mohou ověřit vůči řetězu CA.
Vygenerujte soukromý klíč kořenové CA:
openssl genrsa -aes256 -out rootCA.key 4096Až budete vyzváni, zadejte heslo, které se použije s rootCA.key.
Vytvořte samopodepsaný kořenový certifikát s názvem rootCA.pem:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pemZobrazí se výzva k zadání hesla soukromého klíče a k vyplnění několika volitelných polí. Pro účely testování můžete volitelná pole nechat prázdná.
Vygenerujte soukromý klíč mezilehlé CA:
openssl genrsa -aes256 -out intermediate.key 4096Až budete vyzváni, zadejte heslo, které se použije s intermediate.key.
Vytvořte žádost o podepsání certifikátu (CSR) pro mezilehlý certifikát:
openssl req -new -sha256 -key intermediate.key -out intermediate.csrZobrazí se výzva k zadání hesla soukromého klíče a k vyplnění několika volitelných polí. Pro účely testování můžete volitelná pole nechat prázdná.
Vytvořte soubor CA Extension s názvem v3_intermediate_ca.ext. Například,
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSignUjistěte se, že basicConstraints zahrnuje CA:true vlastnost. Tato vlastnost umožňuje, aby mezilehlý certifikát fungoval jako CA a podepisoval klientské certifikáty.
Podepište mezilehlý certifikát pomocí kořenové CA:
openssl x509 -req -in intermediate.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out intermediate.pem -days 1825 -sha256 -extfile v3_intermediate_ca.extZkombinujte mezilehlý a kořenový certifikát do jednoho souboru:
cat intermediate.pem rootCA.pem > ca-chain.pemMezilehlý certifikát by měl být na začátku souboru, následovaný certifikátem, kterým byl podepsán.
Nahrajte obsah ca-chain.pem ke Cloudflare Access. Pokyny naleznete v Přidejte mTLS do své aplikace Access.
Vygenerujte soukromý klíč pro klienta:
openssl genrsa -out client.key 2048Vytvořte CSR pro certifikát klienta:
openssl req -new -key client.key -out client.csrZobrazí se výzva k vyplnění několika volitelných polí. Pro účely testování můžete nastavit Obecný název na něco jako John Doe.
Podepište klientský certifikát mezilehlým certifikátem:
openssl x509 -req -in client.csr -CA intermediate.pem -CAkey intermediate.key -CAcreateserial -out client.pem -days 365 -sha256Ověřte klientský certifikát vůči certifikačnímu řetězu:
openssl verify -CAfile ca-chain.pem client.pemclient.pem: OKNyní můžete použít klientský certifikát (client.pem) a jeho klíč (client.key) na testování mTLS.
Tento návod používá Sada nástrojů PKI od Cloudflare ↗ a vygenerovat kořenovou CA a klientské certifikáty ze souborů JSON.
Proces vyžaduje dva balíčky ze sady nástrojů Cloudflare PKI:
cf-sslcfssljsonTyto balíčky můžete nainstalovat z GitHub repozitář Cloudflare SSL ↗. Budete potřebovat funkční instalaci Go verze 1.12 nebo novější. Případně můžete stáhnout balíčky ↗ přímo. Postupujte podle pokynů v části Installation a nainstalujte toolkit. Ujistěte se, že jste nainstalovali všechny nástroje, které toolkit obsahuje.
Vytvořte nový adresář pro uložení kořenové CA.
V tomto adresáři vytvořte dva nové soubory:
CSR. Vytvořte soubor s názvem ca-csr.json a přidejte následující blok JSON, poté soubor uložte.
{
"CN": "Access Testing CA",
"key": {
"algo": "rsa",
"size": 4096
},
"names": [
{
"C": "US",
"L": "Austin",
"O": "Access Testing",
"OU": "TX",
"ST": "Texas"
}
]
}konfigurace. Vytvořte soubor s názvem ca-config.json a přidejte následující blok JSON, poté soubor uložte.
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"server": {
"usages": ["signing", "key encipherment", "server auth"],
"expiry": "8760h"
},
"client": {
"usages": ["signing", "key encipherment", "client auth"],
"expiry": "8760h"
}
}
}
}Nyní spusťte následující příkaz a vygenerujte kořenovou CA pomocí těchto souborů.
cfssl gencert -initca ca-csr.json | cfssljson -bare caPříkaz vypíše kořenový certifikát (ca.pem) a jeho klíč (ca-key.pem).
lsca-config.json ca-csr.json ca-key.pem ca.csr ca.pemNahrajte obsah ca.pem ke Cloudflare Access. Pokyny naleznete v Přidejte mTLS do své aplikace Access.
Chcete-li vygenerovat klientský certifikát, který se bude ověřovat vůči nahrané kořenové CA:
Vytvořte soubor s názvem client-csr.json a přidejte následující blok JSON:
{
"CN": "James Royal",
"hosts": [""],
"key": {
"algo": "rsa",
"size": 4096
},
"names": [
{
"C": "US",
"L": "Austin",
"O": "Access",
"OU": "Access Admins",
"ST": "Texas"
}
]
}Nyní pomocí následujícího příkazu vygenerujte klientský certifikát pomocí Cloudflare PKI toolkitu:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client-csr.json | cfssljson -bare clientPříkaz vypíše soubor klientského certifikátu (client.pem) a jeho klíč (client-key.pem). Tyto soubory nyní můžete použít k testování mTLS.
Pomocí sady nástrojů Cloudflare PKI můžete také vygenerovat seznam odvolaných certifikátů (CRL). Tento seznam bude obsahovat odvolané klientské certifikáty.
Získejte sériové číslo z dříve vygenerovaného klientského certifikátu. Toto sériové číslo, případně další čísla, která chcete odvolat, přidejte v hexadecimálním formátu do textového souboru. Tento příklad používá soubor s názvem serials.txt.
Vytvořte CRL pomocí následujícího příkazu.
cfssl gencrl serials.txt ../mtls-test/ca.pem ../mtls-test/ca-key.pem | base64 -D > ca.crlBudete muset přidat CRL na svůj server nebo vynutit odvolání ve Cloudflare Workeru. Ukázkový Worker Script najdete na Repozitář Cloudflare na GitHubu ↗.
RFC 9440 ↗ definuje Client-Cert a Client-Cert-Chain Pole HTTP hlaviček pro předávání informací o klientském certifikátu origin serverům. Tyto hlavičky můžete sestavit pomocí pravidla úprav hlaviček požadavku s následujícími poli Ruleset Engine:
cf.tls_client_auth.cert_rfc9440 : Koncový certifikát klienta zakódovaný podle formátování RFC 9440 (viz odkaz).cf.tls_client_auth.cert_chain_rfc9440 : Řetězec certifikátů (bez koncového certifikátu) zakódovaný podle formátování RFC 9440 (viz odkaz).Jak je uvedeno v definicích polí, lze pole nastavit buď na prázdný řetězec, nebo na platné kódování podle RFC 9440. Správné použití závisí na několika faktorech popsaných v následujících částech.
cert_rfc9440 a cert_chain_rfc9440 pole jsou vyplněna bez ohledu na výsledek ověření certifikátu. To znamená, že klient může předložit neplatný, prošlý nebo samopodepsaný certifikát a pole budou přesto obsahovat zakódovaná data certifikátu. Než začnete hodnotám důvěřovat, vždy zkontrolujte následující pole:
cf.tls_client_auth.cert_verified : Vrací true pokud je klientský certifikát platný.cf.tls_client_auth.cert_revoked : Vrací true pokud byl klientský certifikát odvolán.Klient může rovněž zahrnout vlastní Client-Cert nebo Client-Cert-Chain hlavičky v požadavku a vložit tak libovolné hodnoty. Jak je popsáno v Bezpečnostní hlediska RFC 9440 ↗, musíte bezpodmínečně odstranit veškeré existující Client-Cert a Client-Cert-Chain hlavičky z příchozích požadavků bez ohledu na platnost certifikátu. Tím se zabrání tomu, aby klient vložil podvržená data certifikátu, kterým by váš origin důvěřoval.
Viz Povolení mTLS pro podrobnosti o konfiguraci mTLS a validace certifikátů.
Zakódovaný koncový certifikát je omezen na 10 KiB a zakódovaný řetěz na 16 KiB. Pokud zakódovaná hodnota překročí limit, příslušné pole obsahuje prázdný řetězec. Ke kontrole tohoto stavu použijte následující pole:
cf.tls_client_auth.cert_rfc9440_too_large : Vrací true pokud zakódovaný certifikát přesáhne 10 KiB.cf.tls_client_auth.cert_chain_rfc9440_too_large : Vrací true pokud zakódovaný řetěz přesáhne 16 KiB.Zde uvádíme příklad, jak tato pole bezpečně použít k sestavení důvěryhodného Client-Cert a Client-Cert-Chain hlavičky přeposílat na váš origin.
Origin se pak může spolehnout na přítomnost hlaviček a mít jistotu, že klient předložil platný certifikát.
Poznámka: Client-Cert-Chain hlavička může být vynechána, pokud klient nepředložil žádné mezilehlé certifikáty (pouze koncový certifikát).
Musíte vytvořit následující pravidla pro úpravu hlaviček požadavku. Hlavička Odebrat pravidla musí být umístěna před Nastavit dynamické pravidla, aby byly hlavičky vložené klientem odstraněny u každého požadavku ještě před nastavením ověřených hodnot.
Toto pravidlo bezpodmínečně odstraňuje jakýkoli Client-Cert hlavičku odeslanou klientem.
Text v Expression Editor:
trueVybraná operace v části Úprava hlavičky požadavku: Odebrat
Název hlavičky: Client-Cert
Toto pravidlo bezpodmínečně odstraňuje jakýkoli Client-Cert-Chain hlavičku odeslanou klientem.
Text v Expression Editor:
trueVybraná operace v části Úprava hlavičky požadavku: Odebrat
Název hlavičky: Client-Cert-Chain
Toto pravidlo nastavuje Client-Cert hlavičku pouze tehdy, když klient předložil platný, neodvolaný certifikát, který je v rámci limitu velikosti.
Text v Expression Editor:
cf.tls_client_auth.cert_verified
and not cf.tls_client_auth.cert_revoked
and not cf.tls_client_auth.cert_rfc9440_too_largeVybraná operace v části Úprava hlavičky požadavku: Nastavit dynamické
Název hlavičky: Client-Cert
Hodnota: cf.tls_client_auth.cert_rfc9440
Toto pravidlo nastavuje Client-Cert-Chain hlavičku pouze tehdy, když klient předložil platný, neodvolaný certifikát
a řetězec není prázdný a je v rámci limitu velikosti.
Text v Expression Editor:
cf.tls_client_auth.cert_verified
and not cf.tls_client_auth.cert_revoked
and cf.tls_client_auth.cert_chain_rfc9440 ne ""
and not cf.tls_client_auth.cert_chain_rfc9440_too_largeVybraná operace v části Úprava hlavičky požadavku: Nastavit dynamické
Název hlavičky: Client-Cert-Chain
Hodnota: cf.tls_client_auth.cert_chain_rfc9440
Hlavičky podle RFC 9440 můžete sestavit také Cloudflare Worker
pomocí tlsClientAuth
vlastnosti příchozího požadavku.
Platí stejné bezpečnostní zásady, jaké jsou uvedeny výše.
Kromě vynucení ověřování mTLS pro vašeho hostitele můžete klientský certifikát předat i na váš origin server jako hlavičku HTTP. Toto nastavení bývá užitečné pro serverové logování.
Aby se certifikát nepřidával ke každému jednotlivému požadavku, je odeslán pouze při prvním požadavku připojení mTLS.
Nejběžnějším způsobem předání certifikátu je použití Cloudflare API k aktualizovat nastavení názvu hostitele certifikátu mTLS.
Požadovaná oprávnění API tokenu
Access: Mutual TLS Certificates Writecurl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/access/certificates/settings" \
--request PUT \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
--json '{
"settings": [
{
"hostname": "<HOSTNAME>",
"china_network": false,
"client_certificate_forwarding": true
}
]
}'Jakmile client_certificate_forwarding je nastaveno na true, každý požadavek v rámci spojení mTLS nyní bude obsahovat následující hlavičky:
Cf-Client-Cert-Der-Base64Cf-Client-Cert-Sha256Můžete také upravte hlavičky odpovědí HTTP pomocí Managed Transforms a předejte tak Hlavičky ověřování klienta TLS.
Workers navíc mohou poskytnout podrobnosti o klientský certifikát.
const tlsHeaders = {
"X-CERT-ISSUER-DN": request.cf.tlsClientAuth.certIssuerDN,
"X-CERT-SUBJECT-DN": request.cf.tlsClientAuth.certSubjectDN,
"X-CERT-ISSUER-DN-L": request.cf.tlsClientAuth.certIssuerDNLegacy,
"X-CERT-SUBJECT-DN-L": request.cf.tlsClientAuth.certSubjectDNLegacy,
"X-CERT-SERIAL": request.cf.tlsClientAuth.certSerial,
"X-CERT-FINGER": request.cf.tlsClientAuth.certFingerprintSHA1,
"X-CERT-VERIFY": request.cf.tlsClientAuth.certVerify,
"X-CERT-NOTBE": request.cf.tlsClientAuth.certNotBefore,
"X-CERT-NOTAF": request.cf.tlsClientAuth.certNotAfter,
};mTLS aktuálně nefunguje pro:
Cloudflare odešle následující oznámení než vyprší platnost vašich certifikátů mutual TLS:
Upozornění na vypršení platnosti certifikátu mTLS pro Access
Access zákazníkům, kteří používají klientské certifikáty pro vzájemné ověřování TLS. Toto oznámení se odešle 30 a 14 dní před vypršením platnosti certifikátu.
Další možnosti / filtryŽádné.
Zahrnuto vNákup Access a/nebo Cloudflare for SaaS.
Co dělat, když upozornění obdržíte?Nahrajte obnovený certifikát.