Rechercher

8.4. Gestion des certificats avec un émetteur ACME

download PDF

L'opérateur cert-manager pour Red Hat OpenShift prend en charge l'utilisation de serveurs ACME CA, tels que Let's Encrypt, pour émettre des certificats.

8.4.1. À propos des émetteurs de l'ACME

Le type d'émetteur ACME pour l'opérateur cert-manager de Red Hat OpenShift représente un serveur d'autorité de certification (CA) ACME (Automated Certificate Management Environment). Les serveurs ACME CA s'appuient sur challenge pour vérifier qu'un client possède les noms de domaine pour lesquels le certificat est demandé. Si le défi est réussi, le cert-manager Operator pour Red Hat OpenShift peut émettre le certificat. Si le défi échoue, l'opérateur de cert-manager pour Red Hat OpenShift n'émet pas le certificat.

8.4.1.1. Types de défis ACME pris en charge

L'opérateur cert-manager pour Red Hat OpenShift prend en charge les types de défis suivants pour les émetteurs ACME :

HTTP-01

Avec le type de défi HTTP-01, vous fournissez une clé calculée à un point d'extrémité HTTP URL dans votre domaine. Si le serveur ACME CA peut obtenir la clé à partir de l'URL, il peut vous valider en tant que propriétaire du domaine.

Pour plus d'informations, voir HTTP01 dans la documentation de cert-manager en amont.

DNS-01

Avec le type de défi DNS-01, vous fournissez une clé calculée dans un enregistrement DNS TXT. Si le serveur de l'ACME CA peut obtenir la clé par consultation DNS, il peut vous valider en tant que propriétaire du domaine.

Pour plus d'informations, voir DNS01 dans la documentation de cert-manager en amont.

8.4.1.2. Fournisseurs DNS-01 pris en charge

L'opérateur cert-manager pour Red Hat OpenShift prend en charge les fournisseurs DNS-01 suivants pour les émetteurs ACME :

  • Amazon Route 53
  • Azure DNS

    Note

    L'opérateur cert-manager pour Red Hat OpenShift ne prend pas en charge l'utilisation des identités de pods Azure Active Directory (Azure AD) pour attribuer une identité gérée à un pod.

  • Google Cloud DNS

    Note

    L'opérateur cert-manager pour Red Hat OpenShift ne prend pas en charge l'utilisation de la fédération d'identité de la charge de travail de Google.

8.4.2. Configuration d'un émetteur ACME pour résoudre les problèmes HTTP-01

Vous pouvez utiliser cert-manager Operator pour Red Hat OpenShift pour configurer un émetteur ACME afin de résoudre les défis HTTP-01. Cette procédure utilise Let's Encrypt comme serveur ACME.

Conditions préalables

  • Vous avez accès au cluster en tant qu'utilisateur ayant le rôle cluster-admin.
  • Vous avez un service que vous voulez exposer. Dans cette procédure, le service est nommé sample-workload.

Procédure

  1. Créer un émetteur de cluster ACME.

    1. Créer un fichier YAML qui définit l'objet ClusterIssuer:

      Exemple de fichier acme-cluster-issuer.yaml

      apiVersion: cert-manager.io/v1
      kind: ClusterIssuer
      metadata:
        name: letsencrypt-staging                                        1
      spec:
        acme:
          preferredChain: ""
          privateKeySecretRef:
            name: <secret_for_private_key>                               2
          server: https://acme-staging-v02.api.letsencrypt.org/directory 3
          solvers:
          - http01:
              ingress:
                class: openshift-default                                 4

      1
      Indiquez le nom de l'émetteur du cluster.
      2
      Remplacez <secret_private_key> par le nom du secret dans lequel vous souhaitez stocker la clé privée du compte ACME.
      3
      Indiquez l'URL permettant d'accéder au point de terminaison directory du serveur ACME. Cet exemple utilise l'environnement de préparation de Let's Encrypt.
      4
      Spécifiez la classe d'entrée.
    2. Créez l'objet ClusterIssuer en exécutant la commande suivante :

      $ oc create -f acme-cluster-issuer.yaml
  2. Créer une entrée pour exposer le service de la charge de travail de l'utilisateur.

    1. Créer un fichier YAML qui définit un objet Namespace:

      Exemple de fichier namespace.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
        name: my-ingress-namespace 1

      1
      Spécifiez l'espace de noms pour l'entrée.
    2. Créez l'objet Namespace en exécutant la commande suivante :

      $ oc create -f namespace.yaml
    3. Créer un fichier YAML qui définit l'objet Ingress:

      Exemple de fichier ingress.yaml

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: sample-ingress                                           1
        namespace: my-ingress-namespace                                2
        annotations:
          cert-manager.io/cluster-issuer: letsencrypt-staging          3
          acme.cert-manager.io/http01-ingress-class: openshift-default 4
      spec:
        ingressClassName: openshift-default                            5
        tls:
        - hosts:
          - <hostname>                                                 6
          secretName: sample-tls                                       7
        rules:
        - host: <hostname>                                             8
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: sample-workload                                9
                  port:
                    number: 80

      1
      Spécifiez le nom de l'entrée.
      2
      Spécifiez l'espace de noms que vous avez créé pour l'Ingress.
      3
      Indiquez l'émetteur de cluster que vous avez créé.
      4
      Spécifiez la classe d'entrée.
      5
      Spécifiez la classe d'entrée.
      6
      Remplacez <hostname> par le Subject Alternative Name à associer au certificat. Ce nom est utilisé pour ajouter des noms DNS au certificat.
      7
      Indiquez le secret dans lequel le certificat créé doit être stocké.
      8
      Remplacez <hostname> par le nom d'hôte. Vous pouvez utiliser la syntaxe <host_name>.<cluster_ingress_domain> pour tirer parti de l'enregistrement DNS générique *.<cluster_ingress_domain> et du certificat de service pour le cluster. Par exemple, vous pouvez utiliser apps.<cluster_base_domain>. Sinon, vous devez vous assurer qu'un enregistrement DNS existe pour le nom d'hôte choisi.
      9
      Spécifiez le nom du service à exposer. Cet exemple utilise un service nommé sample-workload.
    4. Créez l'objet Ingress en exécutant la commande suivante :

      $ oc create -f ingress.yaml

8.4.3. Configuration d'un émetteur ACME pour résoudre les problèmes liés au DNS-01

Vous pouvez utiliser cert-manager Operator pour Red Hat OpenShift pour configurer un émetteur ACME afin de résoudre les défis DNS-01. Cette procédure utilise Let’s Encrypt comme serveur ACME CA et montre comment résoudre les défis DNS-01 avec Amazon Route 53.

Note

Les zones DNS privées ne sont pas prises en charge.

Conditions préalables

  • Vous avez accès au cluster OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin.
  • Vous avez configuré un rôle IAM pour Amazon Route 53. Pour plus d'informations, voir Route53 dans la documentation de cert-manager en amont.

    Note

    Si votre cluster est configuré à l'adresse not pour utiliser le service de jetons de sécurité AWS (STS), vous devez fournir des informations d'identification explicites pour accessKeyID et secretAccessKey. Si votre cluster utilise AWS STS, vous pouvez utiliser des informations d'identification ambiantes implicites.

Procédure

  1. Facultatif : Remplacer les paramètres du serveur de noms pour l'autocontrôle DNS-01 :

    Cette étape n'est nécessaire que si la zone cible hébergée publiquement chevauche la zone hébergée privée par défaut du cluster.

    1. Modifiez la ressource CertManager en exécutant la commande suivante :

      $ oc edit certmanager cluster
    2. Ajoutez une section spec.controllerConfig avec les arguments de substitution suivants :

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers=1.1.1.1:53' 2
            - '--dns01-recursive-nameservers-only'       3
      1
      Ajouter la section spec.controllerConfig.
      2
      Fournir une liste de serveurs de noms <host>:<port> séparés par des virgules à interroger pour l'auto-vérification DNS-01.
      3
      Indiquer d'utiliser uniquement les serveurs de noms récursifs au lieu de vérifier les serveurs de noms faisant autorité associés à ce domaine.
    3. Enregistrez le fichier pour appliquer les modifications.
  2. Facultatif : Créez un espace de noms pour l'émetteur.

    1. Créer un fichier YAML qui définit un objet Namespace:

      Exemple de fichier namespace.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
        name: my-issuer-namespace 1

      1
      Indiquer l'espace de noms de l'émetteur.
    2. Créez l'objet Namespace en exécutant la commande suivante :

      $ oc create -f namespace.yaml
  3. Créez un secret dans lequel vous stockerez vos informations d'identification AWS en exécutant la commande suivante :

    $ oc create secret generic aws-secret --from-literal=awsSecretAccessKey=<aws_secret_access_key> \ 1
        -n my-issuer-namespace
    1
    Remplacez <aws_secret_access_key> par votre clé d'accès secrète AWS.
  4. Créer un émetteur.

    1. Créer un fichier YAML qui définit l'objet Issuer:

      Exemple de fichier issuer.yaml

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: letsencrypt-staging                                        1
        namespace: my-issuer-namespace                                   2
      spec:
        acme:
          server: https://acme-staging-v02.api.letsencrypt.org/directory 3
          email: "<email_address>"                                       4
          privateKeySecretRef:
            name: <secret_private_key>                                   5
          solvers:
          - dns01:
              route53:
                accessKeyID: <aws_key_id>                                6
                hostedZoneID: <hosted_zone_id>                           7
                region: us-east-1
                secretAccessKeySecretRef:
                  name: "aws-secret"                                     8
                  key: "awsSecretAccessKey"                              9

      1
      Indiquez le nom de l'émetteur.
      2
      Indiquez l'espace de noms que vous avez créé pour l'émetteur.
      3
      Indiquez l'URL permettant d'accéder au point de terminaison directory du serveur ACME. Cet exemple utilise l'environnement de préparation Let’s Encrypt.
      4
      Remplacez <email_address> par votre adresse électronique.
      5
      Remplacez <secret_private_key> par le nom du secret dans lequel stocker la clé privée du compte ACME.
      6
      Remplacez <aws_key_id> par votre ID de clé AWS.
      7
      Remplacez <hosted_zone_id> par l'ID de votre zone hébergée.
      8
      Indiquez le nom du secret que vous avez créé.
      9
      Indiquez la clé dans le secret que vous avez créé et qui stocke votre clé d'accès au secret AWS.
    2. Créez l'objet Issuer en exécutant la commande suivante :

      $ oc create -f issuer.yaml
  5. Créer un certificat.

    1. Créer un fichier YAML qui définit l'objet Certificate:

      Exemple de fichier certificate.yaml

      apiVersion: cert-manager.io/v1
      kind: Certificate
      metadata:
        name: my-tls-cert              1
        namespace: my-issuer-namespace 2
      spec:
        isCA: false
        commonName: '<common_name>'    3
        secretName: my-tls-cert        4
        dnsNames:
        - '<domain_name>'              5
        issuerRef:
          name: letsencrypt-staging    6
          kind: Issuer

      1
      Indiquez un nom pour le certificat.
      2
      Indiquez l'espace de noms que vous avez créé pour l'émetteur.
      3
      Remplacez <common_name> par votre nom commun (CN).
      4
      Indiquez le nom du secret à créer qui contiendra le certificat.
      5
      Remplacez <domain_name> par votre nom de domaine.
      6
      Indiquez le nom de l'émetteur que vous avez créé.
    2. Créez l'objet Certificate en exécutant la commande suivante :

      $ oc create -f certificate.yaml
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.