INTEGRITY Dokumentace

Předání certifikátu na server

Přidání hlaviček Client-Cert a Client-Cert-Chain (RFC 9440)

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:

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.

Bezpečnostní aspekty

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:

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ů.

Omezení velikosti

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:

Příklady Transform Rules

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.

Pravidlo 1: odebrání hlavičky Client-Cert

Toto pravidlo bezpodmínečně odstraňuje jakýkoli Client-Cert hlavičku odeslanou klientem.

Text v Expression Editor:

true

Vybraná operace v části Úprava hlavičky požadavku: Odebrat

Název hlavičky: Client-Cert

Pravidlo 2: odebrání hlavičky Client-Cert-Chain

Toto pravidlo bezpodmínečně odstraňuje jakýkoli Client-Cert-Chain hlavičku odeslanou klientem.

Text v Expression Editor:

true

Vybraná operace v části Úprava hlavičky požadavku: Odebrat

Název hlavičky: Client-Cert-Chain

Pravidlo 3: nastavení hlavičky Client-Cert

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_large

Vybraná operace v části Úprava hlavičky požadavku: Nastavit dynamické

Název hlavičky: Client-Cert

Hodnota: cf.tls_client_auth.cert_rfc9440

Pravidlo 4: nastavení hlavičky Client-Cert-Chain

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_large

Vybraná 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

Cloudflare Workers

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.

Předání klientského certifikátu (starší verze)

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.

Cloudflare API

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

Alespoň jeden z následujících oprávnění tokenu je povinné:
Aktualizace nastavení hostname certifikátu mTLS
curl "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:

Managed Transforms

Můžete také upravte hlavičky odpovědí HTTP pomocí Managed Transforms a předejte tak Hlavičky ověřování klienta TLS.

Cloudflare Workers

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,
};