INTEGRITY Dokumentace

Nasaďte vlastní certifikát

Zákazníci s plánem Enterprise, kteří nechtějí instalovat Certifikát Cloudflare mají možnost nahrát do Cloudflare vlastní kořenový certifikát. Tato funkce se někdy označuje jako Bring Your Own Public Key Infrastructure (BYOPKI). Gateway pak pomocí nahraného certifikátu šifruje všechny relace mezi koncovým uživatelem a Gateway, čímž zpřístupňuje všechny funkce kontroly HTTPS, které dříve vyžadovaly certifikát Cloudflare. Do účtu můžete nahrát více certifikátů, ale aktivní může být vždy jen jeden. Pro zachytávání domén pomocí certifikátů JIT a povolení blokovací stránka.

Nahrát můžete buď kořenový certifikát, nebo celý řetězec certifikátů (kořenový certifikát a mezilehlé certifikáty). Díky nahrání řetězce certifikátů stačí na zařízeních koncových uživatelů nainstalovat pouze kořenový certifikát, což může větším podnikům zjednodušit správu certifikátů.

Nahrát můžete až pět vlastních kořenových certifikátů. Pokud vaše organizace potřebuje více než pět certifikátů, obraťte se na tým pro váš účet.

Vygenerujte vlastní kořenovou CA

  1. Otevřete terminál.

  2. (Volitelné) Vytvořte adresář pro kořenovou CA a přejděte do něj.

    mkdir -p /root/customca
    cd /root/customca

    Soubory certifikátu můžete vygenerovat v libovolném adresáři. Tento krok pomáhá udržet pořádek. Pokud ho vynecháte, soubory se vytvoří v aktuálním pracovním adresáři.

  3. Vygenerujte soukromý klíč pro kořenovou CA.

    openssl genrsa -out <CUSTOM-ROOT-PRIVATE-KEY>.pem 2048

    2048 hodnota určuje velikost klíče RSA v bitech. Můžete použít 4096 pro vyšší zabezpečení za cenu mírně pomalejších handshaků TLS.

  4. Vygenerujte samopodepsaný kořenový certifikát.

    openssl req -x509 -sha256 -new -nodes \
      -key <CUSTOM-ROOT-PRIVATE-KEY>.pem \
      -days 365 \
      -out <CUSTOM-ROOT-CERT>.pem \
      -addext "basicConstraints=critical,CA:TRUE" \
      -addext "keyUsage=critical,keyCertSign,cRLSign"

    -addext příznaky přidají basicConstraints a keyUsage rozšíření vyžadovaná RFC 5280 pro certifikáty CA. Bez nich mohou některé klienty TLS odmítnout certifikáty podepsané vaší vlastní CA. Python 3.13 a novější verze ve výchozím nastavení striktně vyžadují dodržování RFC 5280 (ssl.VERIFY_X509_STRICT), což u zařízení používajících Cloudflare One Client způsobí selhání požadavků HTTPS, pokud nahraná certifikační autorita tato rozšíření neobsahuje.

    -days 365 hodnota řídí platnost certifikátu. Kratší doba platnosti snižuje riziko v případě kompromitace klíče, ale vyžaduje častější rotaci. Rotace nasazeného certifikátu BYOPKI je rušivá operace, proto zvolte platnost, která vyváží bezpečnost a provozní náročnost.

    Chyba: Unknown cipher or option -addext

    Pokud váš systém používá verze OpenSSL starší než 1.1.1, -addext příznak není k dispozici. Použijte místo něj konfigurační soubor:

    openssl req -x509 -sha256 -new -nodes \
      -key <CUSTOM-ROOT-PRIVATE-KEY>.pem \
      -days 365 \
      -out <CUSTOM-ROOT-CERT>.pem \
      -config <(printf '[req]\ndistinguished_name=dn\n[dn]\n[v3_ca]\nbasicConstraints=critical,CA:TRUE\nkeyUsage=critical,keyCertSign,cRLSign') \
      -extensions v3_ca
  5. Ověřte, že jsou přítomna požadovaná rozšíření RFC 5280:

    openssl x509 -in <CUSTOM-ROOT-CERT>.pem -noout -ext keyUsage,basicConstraints

    Výstup by měl obsahovat:

    X509v3 Basic Constraints: critical
    		CA:TRUE
    X509v3 Key Usage: critical
    		Certificate Sign, CRL Sign

    Pokud tato pole chybí, vygenerujte certifikát znovu pomocí příkazu z kroku 4.

  6. Chcete-li zkontrolovat soukromý klíč, spusťte následující příkaz:

    openssl rsa -in <CUSTOM-ROOT-PRIVATE-KEY>.pem -text

    Chcete-li zkontrolovat certifikát, spusťte následující příkaz:

    openssl x509 -in <CUSTOM-ROOT-CERT>.pem -text

Při přípravě certifikátu a soukromého klíče k nahrání nezapomeňte odstranit veškeré nežádoucí znaky, například neshodující se subdomény v common name certifikátu.

Nasaďte vlastní kořenový certifikát

Nahrát můžete buď samostatný kořenový certifikát, nebo celý řetězec certifikátů. Při nahrávání řetězce certifikátů přes dashboard, API nebo Terraform certifikáty zřetězte ve formátu PEM tak, aby kořenový certifikát byl první a následovaly mezilehlé certifikáty.

  1. V Cloudflare dashboard, přejděte na Zero Trust > Zásady provozu > Nastavení provozu > Certifikáty.

  2. Vyberte Nahrát certifikát.

  3. Zadejte vygenerovaný soukromý klíč a certifikát SSL, nebo vyberte Vložit certifikát ze souboru k jejich nahrání ze souboru. Pokud nahráváte certifikační řetězec, vložte všechny certifikáty (kořenový i mezilehlé) ve formátu PEM, přičemž kořenový certifikát uveďte jako první.

  4. Vyberte Nahrát vlastní certifikát.

    Nyní můžete použít vygenerovaný vlastní kořenový certifikát ke kontrole.

  1. Použijte Endpoint pro nahrání certifikátu mTLS k nahrání certifikátu a privátního klíče do Cloudflare. Certifikát musí být kořenová CA nebo certifikační řetězec, formátovaný jako jeden řetězec s \n a nahraďte zalomení řádků.

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • Account: SSL and Certificates Write
    Nahrání certifikátu mTLS
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/mtls_certificates" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "example_ca_cert",
    		"certificates": "-----BEGIN CERTIFICATE-----\nXXXXX\n-----END CERTIFICATE-----",
    		"private_key": "-----BEGIN PRIVATE KEY-----\nXXXXX\n-----END PRIVATE KEY-----",
    		"ca": true
    	}'

    Odpověď vrátí UUID certifikátu. Například:

    {
      "success": true,
      "errors": [],
      "messages": [],
      "result": {
        "id": "2458ce5a-0c35-4c7f-82c7-8e9487d3ff60",
        "name": "example_ca_cert",
        "issuer": "O=Example Inc.,L=California,ST=San Francisco,C=US",
        "signature": "SHA256WithRSA",
        ...
      }
    }

    Při nahrávání řetězce certifikátů, certificates pole by mělo obsahovat všechny certifikáty ve formátu PEM. Toto pole naformátujte tak, že jako první uvedete kořenový certifikát a poté připojíte všechny mezilehlé certifikáty.

  2. Nastavte certifikát jako dostupný pro použití při kontrole s Aktivace endpointu certifikátu Zero Trust. Tím se certifikát nasadí do celé globální sítě Cloudflare.

    Aktivace certifikátu Zero Trust
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/certificates/$CERTIFICATE_ID/activate" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

    Odpověď vrátí certifikát a pending_deployment stav vazby. Například:

    {
    	"errors": [],
    	"messages": [],
    	"success": true,
    	"result": {
    		"in_use": false,
    		"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
    		"certificate": "-----BEGIN CERTIFICATE-----\\n ... \\n-----END CERTIFICATE-----\\n",
    		"issuer_org": "Example Inc.",
    		"issuer_raw": "O=Example Inc.,L=California,ST=San Francisco,C=US",
    		"fingerprint": "E9:19:49:AA:DD:D8:1E:C1:20:2A:D8:22:BF:A5:F8:FC:1A:F7:10:9F:C7:5B:69:AB:0:31:91:8B:61:B4:BF:1C",
    		"binding_status": "pending_deployment",
    		"type": "custom",
    		"updated_at": "2014-01-01T05:20:00.12345Z",
    		"uploaded_on": "2014-01-01T05:20:00.12345Z",
    		"created_at": "2014-01-01T05:20:00.12345Z",
    		"expires_on": "2014-01-01T05:20:00.12345Z"
    	}
    }
  3. Použijte Endpoint pro získání podrobností o certifikátu Zero Trust k ověření, že stav vazby certifikátu je nastaven na available.

    Získání podrobností o certifikátu Zero Trust
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/certificates/$CERTIFICATE_ID" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"errors": [],
    	"messages": [],
    	"success": true,
    	"result": {
    		"in_use": false,
    		"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
    		"certificate": "-----BEGIN CERTIFICATE-----\\n ... \\n-----END CERTIFICATE-----\\n",
    		"issuer_org": "Example Inc.",
    		"issuer_raw": "O=Example Inc.,L=California,ST=San Francisco,C=US",
    		"fingerprint": "E9:19:49:AA:DD:D8:1E:C1:20:2A:D8:22:BF:A5:F8:FC:1A:F7:10:9F:C7:5B:69:AB:0:31:91:8B:61:B4:BF:1C",
    		"binding_status": "available",
    		"type": "custom",
    		"updated_at": "2014-01-01T05:20:00.12345Z",
    		"uploaded_on": "2014-01-01T05:20:00.12345Z",
    		"created_at": "2014-01-01T05:20:00.12345Z",
    		"expires_on": "2014-01-01T05:20:00.12345Z"
    	}
    }
  4. (Volitelné) Ověřte, že je certifikát nainstalován na zařízeních vašich uživatelů, a to buď s Cloudflare One Client nebo ručně.

  5. Použijte Endpoint Patch konfigurace účtu Zero Trust k zapnutí certifikátu pro použití při kontrole provozu. Například:

Patch konfigurace účtu Zero Trust
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/configuration" \
	--request PATCH \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"settings": {
				"certificate": {
						"id": "{certificate_id}",
						"in_use": true
				}
		}
	}'

Jakmile in-use je nastaveno na true, Gateway podepíše váš provoz pomocí vlastního kořenového certifikátu a soukromého klíče. Pokud vlastní certifikát vypnete nebo deaktivujete, Gateway se vrátí k dalšímu dostupnému certifikátu Cloudflare vygenerovanému pro váš účet Zero Trust.

Použít vlastní kořenový certifikát

Chcete-li použít vlastní kořenový certifikát, který jste vygenerovali a nahráli do Cloudflare, podívejte se do Aktivace kořenového certifikátu.

Řešení potíží

Error 526: Invalid SSL certificate

Pokud Gateway vrátí Kód odpovědi HTTP: 526 po nasazení vlastního certifikátu najdete v Dokumentace k chybě 526.

Chyby SSL v Python 3.13+ s Cloudflare One Client

Python 3.13 a novější verze umožňují ssl.VERIFY_X509_STRICT ve výchozím nastavení, což vyžaduje, aby certifikáty CA vyhovovaly RFC 5280. Pokud byl váš certifikát BYOPKI vygenerován bez keyUsage a basicConstraints rozšířeními budou požadavky HTTPS v Pythonu selhávat, pokud je aktivní Cloudflare One Client. Chcete-li problém vyřešit, vygenerujte novou vlastní kořenovou CA a nahrajte jej do Cloudflare.