hamburger icon
  • language
back icon Précédent
Choisissez votre langue
Type de contenu

Base de Connaissances

Configurer cert-manager et le service ACME DigiCert avec Kubernetes

Solution ID : SO560
Last Modified : 08/27/2026

Compatible avec cert-manager v1.1 ou version ultérieure.

Important: Le 30 janvier 2024, nous avons mis à jour l’URL ACME. Pour créer vos identifiants, vous devez désormais utiliser la nouvelle URL.

  • Nouvelle URL: https://one.digicert.com/mpki/api/v1/acme/v2/directory
  • URL précédente: https://acme.digicert.com/v2/acme/directory/

 

  1. Créez une URL de répertoire ACME à partir de CertCentral.

  2. Copiez et enregistrez l’URL de répertoire ACME, la clé HMAC et les valeurs KID dans un emplacement sécurisé.

  3. Créez un namespace pour cert-manager.

    kubectl create namespace <namespace>

  4. Créez un secret dans cert-manager pour EAB-HMAC.

    kubectl create secret generic <eab_secret_name> --from-literal secret=<eab_hmac> -n <namespace>

  5. Créez un fichier de configuration YAML spécifiant les valeurs des paramètres permettant d’ajouter un Issuer dans cert-manager.

#test-cert-manager-acme.yaml

apiVersion: cert-manager.io/v1

kind: Issuer

metadata:

  name: <issuer_name>

  namespace: <namespace>

spec:

  acme:

    email: <email_address>

    #New enrolments only

    server: https://one.digicert.com/mpki/api/v1/acme/v2/directory

    externalAccountBinding:

      keyID: <eab_kid>

      keySecretRef:

        name: <eab_secret_name>

        key: secret

      keyAlgorithm: HS256

    privateKeySecretRef:

        name: <account_private_key_name>

    solvers:

    - http01:

        ingress:

          class: nginx

---

apiVersion: cert-manager.io/v1

kind: Certificate

metadata:

  name: <certificate_name>

  namespace: <namespace>

spec:

  dnsNames:

    - <certificate_common_name>

  secretName: <certificate_private_key_name>

  issuerRef:

    name: <issuer_name>

 

6. Exécutez la commande kubectl apply pour demander le certificat au serveur ACME DigiCert.

kubectl apply -f test-cert-manager-acme.yaml

 

7. Exécutez la commande kubectl describe pour vérifier que le compte ACME a été enregistré auprès du serveur ACME DigiCert.

kubectl describe issuer -n <namespace>

 

La sortie est similaire à ce qui suit:

Name:         <issuer_name>

Namespace:    <namespace>

Labels:       <none>

Annotations:  <none>

API Version:  cert-manager.io/v1

Kind:         Issuer

Metadata:

  Creation Timestamp:  2020-12-17T12:16:47Z

  Generation:          1

  Managed Fields:

    API Version:  cert-manager.io/v1alpha2

    Fields Type:  FieldsV1

    fieldsV1:

      f:metadata:

        f:annotations:

          .:

          f:kubectl.kubernetes.io/last-applied-configuration:

      f:spec:

        .:

        f:acme:

          .:

          f:email:

          f:externalAccountBinding:

            .:

            f:keyAlgorithm:

            f:keyID:

            f:keySecretRef:

              .:

              f:key:

              f:name:

          f:privateKeySecretRef:

            .:

            f:name:

          f:server:

          f:skipTLSVerify:

          f:solvers:

    Manager:      kubectl-client-side-apply

    Operation:    Update

    Time:         2020-12-17T12:16:47Z

    API Version:  cert-manager.io/v1

    Fields Type:  FieldsV1

    fieldsV1:

      f:status:

        f:acme:

          .:

          f:lastRegisteredEmail:

          f:uri:

        f:conditions:

    Manager:         controller

    Operation:       Update

    Time:            2020-12-17T12:16:49Z

  Resource Version:  421519

  Self Link:         /apis/cert-manager.io/v1/namespaces/acme-cert-manager-test/issuers/test-acme

  UID:               0a6f67ac-30d9-4e97-876f-4773b2b0a21e

Spec:

  Acme:

    Email:  <email>

    External Account Binding:

      Key Algorithm:  HS256

      Key ID:         <eab_kid>

      Key Secret Ref:

        Key:          secret

        Name:         <eab_secret_name>

    Preferred Chain:

    Private Key Secret Ref:

      Name:           <account_private_key_name>

    Server:           https://one.digicert.com/mpki/api/v1/acme/v2/directory

    Skip TLS Verify:  true

    Solvers:

      http01:

        Ingress:

          Class:  nginx

Status:

  Acme:

    Last Registered Email:  <email>

    Uri: <unique_account_url>                  

  Conditions:

    Last Transition Time:  2020-12-17T12:16:49Z

    Message:               The ACME account was registered with the ACME server

    Reason:                ACMEAccountRegistered

    Status:                True

    Type:                  Ready

Events:  


8.  Une fois le compte ACME enregistré, exécutez les commandes suivantes:

  • Pour vérifier l’état de la demande de certificat:
kubectl describe certificaterequest -n <namespace>

 

La sortie est similaire à ce qui suit:

#certificaterequest output

  Conditions:

    Last Transition Time:  2020-12-17T17:29:27Z

    Message:               Certificate fetched from issuer successfully

    Reason:                Issued

    Status:                True

    Type:                  Ready

Events:                    <none>


  • Pour vérifier l’état du certificat:
kubectl describe certificate -n <namespace>



La sortie est similaire à ce qui suit:

#certificate output

 Spec:

  Dns Names:

    <certificate_common_name>

  Issuer Ref:

    Name:       <issuer_name>

  Secret Name:  <certificate_secret_name>

Status:

  Conditions:

    Last Transition Time:  2020-12-17T17:29:27Z

    Message:               Certificate is up to date and has not expired

    Reason:                Ready

    Status:                True

    Type:                  Ready

  Not After:               2021-12-21T23:59:59Z

  Not Before:              2020-12-17T00:00:00Z

  Renewal Time:            2021-11-21T23:59:59Z

  Revision:                1

Events:                    


Remarque: Si une URL de répertoire ACME est utilisée pour plusieurs émissions, remplacez l’attribut Kind d’un Issuer par ClusterIssuer et supprimez les attributs metadata:namespace.

Toutefois, nous vous recommandons de conserver un Issuer unique par namespace afin de garantir des opérations mutuellement exclusives.