Panoramica
Questa guida illustra l'integrazione di Keyfactor EJBCA Enterprise (eseguito il deployment come appliance esterna) come autorità di certificazione (CA) di terze parti per Google Distributed Cloud (GDC) air-gapped.
Keyfactor EJBCA Enterprise è una piattaforma di autorità di certificazione altamente scalabile, solida e conforme allo standard FIPS che consente alle organizzazioni di gestire l'infrastruttura a chiave pubblica (PKI) in ambienti eterogenei.
GDC con air gap include un servizio Certificate Authority integrato per la gestione automatizzata di chiavi e certificati all'interno del confine del cloud in hosting. Tuttavia, le organizzazioni che hanno standardizzato la propria infrastruttura PKI su Keyfactor EJBCA per i workload esistenti al di fuori di GDC potrebbero preferire l'utilizzo della stessa architettura CA e delle stesse policy di gestione coerenti per i workload in esecuzione all'interno dei propri ambienti GDC con air gap.
Questa guida mostra come configurare il networking GDC, il DNS interno e il cert-manager di Kubernetes per automatizzare la gestione del ciclo di vita dei certificati (ACME) e supportare l'emissione programmatica di volumi elevati utilizzando un pattern di autorità di registrazione (RA).
Ipotesi
Prima di procedere con questa guida, assicurati che siano soddisfatti i seguenti presupposti:
- Keyfactor EJBCA viene distribuito come appliance software o hardware e per il servizio viene configurato un indirizzo IP stabile.
- Le autorità di certificazione (CA) radice, subordinate e di gestione sono state create nell'istanza EJBCA.
- Sono stati configurati i profili delle entità finali (EE), ad esempio per i certificati del server TLS.
- I certificati per gli utenti CA amministrativi sono stati scaricati.
- I protocolli richiesti (come ACME) sono abilitati nell'istanza EJBCA.
- In questa guida vengono utilizzati gli algoritmi di firma RSA. Puoi modificare l'algoritmo di firma in base ai tuoi requisiti specifici o a ciò che è configurato nella tua istanza EJBCA.
Architettura
L'architettura segue il modello di autorità di certificazione esterna, in cui il server EJBCA e il relativo modulo di sicurezza hardware (HSM) di supporto sono ospitati esternamente al di fuori dei confini fisici di GDC, ma sono accessibili dalla rete. Il server EJBCA può essere distribuito esternamente come appliance hardware o software. L'integrazione di base descritta in questa guida richiede solo che il server EJBCA esterno sia raggiungibile utilizzando un indirizzo IP stabile.

I componenti chiave di questa architettura includono:
- EJBCA Enterprise Server: viene eseguito il deployment esternamente come appliance hardware o software Keyfactor, che ospita le CA (principale e subordinata) e genera tutto il materiale delle chiavi CA all'interno di un HSM certificato CC EAL4+.
- Cluster Kubernetes GDC Standard: l'ambiente di computing che esegue i workload dei clienti, cert-manager e i proxy di integrazione.
- DNS interno di GDC: gestisce le zone DNS private locali (utilizzando il nome di dominio privato configurato nelle variabili di ambiente) utilizzate per risolvere le sfide DNS-01 ACME.
- Gateway in uscita GDC: indirizza il traffico in uscita dai pod del cluster all'indirizzo IP del server EJBCA esterno.
- Registry privato Harbor: ospita le immagini container sottoposte a mirroring (come l'emittente cert-manager EJBCA) per il deployment con air gap.
Prima di iniziare
Prima di iniziare l'integrazione, assicurati che il tuo ambiente GDC soddisfi i seguenti requisiti:
- Innanzitutto, crea un progetto che fungerà da contenitore per tutte le risorse generate in questa guida.
Configura le variabili di ambiente a cui verrà fatto riferimento in questa guida. Modifica questi valori in base alle esigenze del tuo ambiente specifico:
# GDC Environment Configuration export GDC_ORG="your-org-name" export GDC_ZONE="your-zone-name" export GDC_PROJECT_ID="your-project-id" export GDC_USER_NAME="your-gdc-user-email" export GDC_CLUSTER_NAME="your-cluster-name" # EJBCA Server Configuration export EJBCA_DNS_ZONE="example.internal" export EJBCA_HOSTNAME="ejbca.${EJBCA_DNS_ZONE}" export EJBCA_LB_IP="XX.XX.XX.XX" # Stable IP of your EJBCA Server export EJBCA_CA_NAME="GDC Subordinate CA" export EJBCA_NAMESPACE="ejbca-ee" export CERTIFICATE_PROFILE_NAME="GDC TLS SERVER PROFILE" export END_ENTITY_PROFILE_NAME="GDC TLS SERVER EE PROFILE" # Harbor Private Registry Configuration export HARBOR_INSTANCE_URL="your-harbor-url.internal" export HARBOR_PROJECT="your-harbor-project" export HARBOR_ROBOT_ACCOUNT="robot$your-robot-name" export HARBOR_ROBOT_SECRET="your-robot-secret" export HARBOR_PULL_SECRET_NAME="harbor-secret"Nota sulla rete: questa guida presuppone che l'esecuzione avvenga da un nodo bastion che ha accesso alle API GDC con air gap e a internet per scaricare i manifest e le immagini container richiesti. Se esegui questa operazione da una macchina senza accesso a internet, devi ottenere questi asset separatamente (ad esempio, utilizzando
docker saveper esportare le immagini da una macchina connessa edocker loadper importarle) e caricarli in modo sicuro nel tuo ambiente prima di procedere.
Configura gli alias kubectl
In questa sezione, crei comodi alias della riga di comando per le API di gestione a livello di zona e globali di GDC:
Crea un alias per l'API di gestione a livello di zona (sostituisci MANAGEMENT_API_KUBECONFIG con il percorso del kubeconfig per l'API di gestione):
alias km="kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG"Crea un alias per l'API globale (sostituisci GLOBAL_API_KUBECONFIG con il percorso del kubeconfig per l'API globale):
alias kg="kubectl --kubeconfig GLOBAL_API_KUBECONFIG"
Crea il cluster GDC standard
In questa sezione, esegui il deployment di un cluster Kubernetes standard all'interno di GDC e configuri i ruoli di amministratore del cluster standard GDC e le credenziali del Container Registry Harbor locale:
1 Identifica i tipi di immagini delle macchine virtuali disponibili eseguendo:
```shell
gdcloud compute machine-types list
```
2 Seleziona un tipo di macchina appropriato per i nodi worker del cluster:
```shell
export MACHINE_TYPE="n3-standard-8-gdc"
```
3 Crea un cluster standard con due nodi worker utilizzando l'API di gestione a livello di zona:
```shell
km create -f - <<EOF
apiVersion: cluster.gdc.goog/v1
kind: Cluster
metadata:
name: ${GDC_CLUSTER_NAME}
namespace: ${GDC_PROJECT_ID}
spec:
nodePools:
- machineTypeName: ${MACHINE_TYPE}
nodeCount: 2
name: ${GDC_CLUSTER_NAME}-node-pool
EOF
```
This creates a simple GDC cluster. Cluster creation
can take up to 60 minutes to complete. To check the status, use the
following command:
```shell
km get clusters/${GDC_CLUSTER_NAME} \
-n ${GDC_PROJECT_ID} \
--watch
```
After the cluster is ready, the output should show a STATE of `Running`.
4 Quando il cluster è pronto, recupera le relative credenziali:
```shell
KUBECONFIG=kubeconfig-${GDC_CLUSTER_NAME}.yaml gdcloud clusters \
get-credentials ${GDC_CLUSTER_NAME} \
--standard \
--project ${GDC_PROJECT_ID} \
--zone ${GDC_ZONE}
```
5 Assegna i ruoli di amministratore del cluster standard GDC al tuo utente GDC:
```shell
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=cluster-admin
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=standard-cluster-admin
```
6 Crea un'istanza Harbor e un progetto Harbor in GDC per ospitare le immagini container sottoposte a mirroring:
```shell
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=harbor-instance-admin
```
7 Crea un account robot Harbor e registra il nome utente e la chiave secret.
8 Esegui l'autenticazione con l'istanza Harbor:
```shell
docker --config=./docker-harbor login ${HARBOR_INSTANCE_URL} \
-u ${HARBOR_ROBOT_ACCOUNT} \
-p ${HARBOR_ROBOT_SECRET}
```
This saves the robot account credentials to
`./docker-harbor/config.json` for subsequent Secret creation.
Configurazione dell'infrastruttura e della rete
In questa sezione configurerai l'infrastruttura GDC e le impostazioni della rete sottostanti. In questo modo, i workload Kubernetes possono risolvere il nome di dominio host EJBCA esterno e instradare correttamente le chiamate API in uscita al relativo indirizzo IP.
Configurazione del DNS privato in GDC con air gap
Per stabilire la risoluzione del dominio, esegui il deployment di una zona DNS privata e di un set di record per mappare il server EJBCA esterno a un nome di dominio locale, consentendo ai servizi all'interno di GDC di connettersi utilizzando un nome host stabile anziché un indirizzo IP non elaborato:
Assegna il ruolo Amministratore progetto DNS gestito al tuo utente:
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=managed-dns-project-adminEsegui il deployment della risorsa
ManagedDNSZoneglobale:kubectl --kubeconfig GLOBAL_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: private-example-internal namespace: ${GDC_PROJECT_ID} spec: dnsName: ${EJBCA_DNS_ZONE} visibility: PRIVATE EOFEsegui il deployment di
ResourceRecordSetche punta all'indirizzo IP della tua appliance EJBCA:kubectl --kubeconfig GLOBAL_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ResourceRecordSet metadata: name: ${EJBCA_HOSTNAME} namespace: ${GDC_PROJECT_ID} spec: name: ${EJBCA_HOSTNAME} ttlSeconds: 600 type: A rrData: - ${EJBCA_LB_IP} dnsZone: private-example-internal EOF
Configurazione del gateway NAT in uscita
Successivamente, configura il networking in uscita di GDC impostando una subnet personalizzata e un gateway NAT per consentire ai workload Kubernetes (come i client cert-manager e dell'autorità di registrazione) di instradare in modo sicuro il traffico in uscita al server EJBCA:
Assegna i ruoli di Network Developer a livello di progetto e di organizzazione:
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=cloud-nat-developer gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=subnet-project-admin gdcloud organizations add-iam-policy-binding ${GDC_ORG} \ --member="user:${GDC_USER_NAME}" \ --role=subnet-org-adminCrea la subnet in uscita:
kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: name: ejbca-cluster-egress namespace: ${GDC_PROJECT_ID} spec: ipv4Request: prefixLength: 32 parentReference: name: data-network-segment-${GDC_ZONE}-group namespace: platform type: SubnetGroup type: Leaf EOFCrea il
CloudNATGatewaycorrispondente al selettore dell'emittente cert-manager:kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: CloudNATGateway metadata: name: ejbca-egress-gateway namespace: ${GDC_PROJECT_ID} spec: subnetRefs: - ejbca-cluster-egress workloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: ${GDC_CLUSTER_NAME} workloads: matchLabels: app.kubernetes.io/name: ejbca-cert-manager-issuer EOF
Integrazione di cert-manager di Kubernetes
In questa sezione, integrerai l'emittente cert-manager EJBCA personalizzato con il servizio cert-manager di GDC. In questo modo, puoi configurare il provisioning, il rinnovo e la gestione del ciclo di vita dei certificati automatici per i tuoi servizi containerizzati.

Configura EJBCA per l'emittente
Per integrare l'emittente, configura i profili necessari, registra la credenziale client di amministrazione e configura le associazioni dei ruoli all'interno del server EJBCA. In questo modo viene stabilito un canale amministrativo sicuro che consente a cert-manager di autenticarsi con EJBCA e richiedere certificati.
Crea profilo certificato amministratore
Per iniziare, devi creare un profilo del certificato all'interno di EJBCA per definire le proprietà tecniche e i vincoli crittografici (come algoritmi e periodi di validità) del certificato amministrativo:
- Apri l'interfaccia utente amministratore di EJBCA, vai a CA Functions (Funzioni CA) > Certificate Profiles (Profili certificato).
- Clona il profilo ENDUSER e assegnagli il nome
GDC ADMIN PROFILE. - Modifica
GDC ADMIN PROFILEe configura le seguenti impostazioni:- Algoritmi delle chiavi disponibili: RSA
- Lunghezze in bit disponibili: 2048, 3072, 4096
- Signature Algorithm (Algoritmo di firma): SHA512WithRSA
- Validità:
200d - Issuer Alternative Name (Nome alternativo emittente): deseleziona Use (Utilizza)
- Punti di distribuzione CRL: seleziona Utilizza
- Utilizza il punto di distribuzione CRL definito dalla CA: seleziona Utilizza.
- Accesso alle informazioni sull'autorità: seleziona Utilizza
- Utilizza il localizzatore OCSP definito dalla CA: seleziona Utilizza.
- Utilizza l'emittente CA definito dalla CA: seleziona Utilizza
- CA disponibili: seleziona
GDC Subordinate CA
- Fai clic su Salva.
Crea profilo entità finale amministratore
Successivamente, crea un profilo di entità finale in EJBCA per definire i campi predefiniti e le assegnazioni delle CA, semplificando il processo di registrazione e rilascio del certificato amministrativo:
- Vai a RA Functions (Funzioni RA) > End Entity Profiles (Profili entità finale).
- In Aggiungi profilo entità finale, inserisci
GDC ADMIN EE PROFILEe fai clic su Aggiungi profilo. - Modifica il profilo e configura le seguenti impostazioni:
- Profilo certificato predefinito:
GDC ADMIN PROFILE - Profili certificato disponibili:
GDC ADMIN PROFILE - CA predefinita:
GDC Subordinate CA - CA disponibili:
GDC Subordinate CA
- Profilo certificato predefinito:
- Fai clic su Salva.
Registra il certificato amministratore
Una volta stabiliti i profili, registra l'identità amministrativa utilizzando l'interfaccia dell'autorità di registrazione (RA) EJBCA ed estrai la chiave privata, il certificato pubblico e la catena di attendibilità per generare i file delle credenziali fisiche necessari per autenticare cert-manager:
- Vai alla scheda RA Web.
- Fai clic su Crea nuova richiesta e configura:
- Tipo di certificato:
GDC ADMIN EE PROFILE - Generazione della coppia di chiavi: da parte della CA
- Algoritmo chiave: RSA a 4096 bit
- Nome comune (CN):
cert-manager - Nome utente:
cert-manager - Codice di registrazione:
abcd
- Tipo di certificato:
- Fai clic su Scarica PEM e salvalo come
cert-manager.pem. Suddividi i file PEM in tre file:
client.key(la chiave segreta):openssl pkey -in cert-manager.pem -out client.keyclient.crt(il certificato pubblico):openssl x509 -in cert-manager.pem -out client.crtca.crt(la catena di attendibilità con i certificati CA subordinati e radice):awk '/BEGIN CERTIFICATE/{i++} i>1' cert-manager.pem > ca.crt
Configura ruoli e regole di accesso
Infine, crei un ruolo amministrativo in EJBCA e lo associ al numero di serie del certificato cert-manager per assicurarti che l'emittente disponga solo del set minimo di autorizzazioni necessarie per approvare e richiedere i certificati:
- Nell'interfaccia utente amministratore di EJBCA, vai a RA Functions (Funzioni RA) > Search End Entities (Cerca entità finali).
- Cerca l'entità finale
cert-managere registra il relativo numero di serie del certificato. - Vai a System Functions (Funzioni di sistema) > Roles and Access Rules (Ruoli e regole di accesso) e fai clic su Add (Aggiungi).
- Assegna al ruolo il nome
cert-managere aggiungi un nuovo membro utilizzando il numero di serie che hai registrato. - Fai clic su Modifica regole di accesso e configura i seguenti privilegi:
- Modello di ruolo: Amministratori RA
- CA autorizzate:
GDC Subordinate CA - Regole per le entità finali: approva, crea e modifica le entità finali
- Profili entità finale:
GDC TLS SERVER EE PROFILE - Altre regole: deseleziona Visualizza audit log
- Fai clic su Salva.
Prepara il cluster GDC
Per preparare l'ambiente GDC, esegui l'autenticazione con il tuo cluster Kubernetes standard e archivia le credenziali amministrative EJBCA estratte all'interno dei secret di Kubernetes, rendendole accessibili in modo sicuro ai pod dell'emittente cert-manager:
Recupera le credenziali del cluster standard:
gdcloud clusters get-credentials "${GDC_CLUSTER_NAME}" \ --standard \ --project "${GDC_PROJECT_ID}" \ --zone "${GDC_ZONE}"Crea lo spazio dei nomi di destinazione per l'emittente personalizzato:
kubectl create ns ejbca-issuer-systemEsegui il deployment del secret di autenticazione TLS:
kubectl create secret tls ejbca-secret \ -n ejbca-issuer-system \ --cert=client.crt \ --key=client.keyEsegui il deployment del secret della catena di attendibilità EJBCA:
kubectl create secret generic ejbca-ca-secret \ -n ejbca-issuer-system \ --from-file=ca.crt
Installa l'emittente EJBCA
Per configurare il deployment, esegui il mirroring dell'immagine container dell'emittente cert-manager EJBCA nel tuo registry Harbor privato ed esegui il deployment del grafico Helm. In questo modo viene creata un'istanza del controller personalizzato necessario per tradurre le richieste di certificato Kubernetes in chiamate API EJBCA:
Crea un secret di pull dell'immagine Harbor nello spazio dei nomi dell'emittente:
# Authenticate with the private Harbor registry docker --config=./docker-harbor login ${HARBOR_INSTANCE_URL} \ -u ${HARBOR_ROBOT_ACCOUNT} \ -p ${HARBOR_ROBOT_SECRET} kubectl create secret docker-registry ${HARBOR_PULL_SECRET_NAME} \ --from-file=.dockerconfigjson=./docker-harbor/config.json \ -n ejbca-issuer-systemEsegui il mirroring dell'immagine ufficiale dell'emittente cert-manager EJBCA su Harbor:
docker pull keyfactor/ejbca-cert-manager-issuer:latest --platform linux/amd64 docker tag keyfactor/ejbca-cert-manager-issuer:latest \ ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer:latest docker --config=./docker-harbor push \ ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer:latestAggiungi il repository Helm e scarica il grafico:
helm repo add ejbca-issuer https://keyfactor.github.io/ejbca-cert-manager-issuer helm repo update helm pull ejbca-issuer/ejbca-cert-manager-issuer --untarEsegui il deployment del grafico Helm utilizzando il repository di immagini sottoposto a mirroring:
helm install ejbca-cert-manager-issuer ./ejbca-cert-manager-issuer \ --namespace ejbca-issuer-system \ --set image.repository=${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer \ --set "imagePullSecrets[0].name=${HARBOR_PULL_SECRET_NAME}" \ --set image.tag=latest
Crea la risorsa emittente
Successivamente, stabilisci le autorizzazioni RBAC di GDC ed esegui il deployment di una risorsa ClusterIssuer globale, che registra il server EJBCA come origine di firma attendibile all'interno del framework cert-manager di Kubernetes:
Configura le autorizzazioni RBAC per consentire al controller cert-manager di GDC di utilizzare l'emittente EJBCA personalizzato:
kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com rules: - verbs: - approve apiGroups: - cert-manager.io resources: - signers resourceNames: - issuers.ejbca-issuer.keyfactor.com/* - clusterissuers.ejbca-issuer.keyfactor.com/* --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com subjects: - kind: ServiceAccount name: cert-manager namespace: cert-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com EOFEsegui il deployment della risorsa
ClusterIssuerglobale:kubectl apply -f - <<EOF apiVersion: ejbca-issuer.keyfactor.com/v1alpha1 kind: ClusterIssuer metadata: name: clusterissuer-ejbca spec: hostname: "${EJBCA_HOSTNAME}" ejbcaSecretName: "ejbca-secret" caBundleSecretName: "ejbca-ca-secret" certificateAuthorityName: "${EJBCA_CA_NAME}" certificateProfileName: "${CERTIFICATE_PROFILE_NAME}" endEntityProfileName: "${END_ENTITY_PROFILE_NAME}" endEntityName: "" EOFVerifica lo stato dell'emittente:
kubectl get clusterissuer.ejbca-issuer.keyfactor.com/clusterissuer-ejbca \ -o "custom-columns=NAME:.metadata.name,STATUS:.status.conditions[0].message"L'output dovrebbe mostrare:
NAME STATUS clusterissuer-ejbca Success
Richiedi un certificato
Per verificare l'integrazione, esegui il deployment di una risorsa Certificate Kubernetes standard per testare il flusso cert-manager end-to-end e confermare che EJBCA firma ed esegue il provisioning del certificato richiesto:
Crea una risorsa Certificate di test per verificare che l'integrazione sia riuscita:
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: ejbca-test-certificate
namespace: ${EJBCA_NAMESPACE}
spec:
commonName: example.com
secretName: ejbca-certificate
issuerRef:
name: clusterissuer-ejbca
group: ejbca-issuer.keyfactor.com
kind: ClusterIssuer
EOF
Verifica che il certificato sia stato creato e sia pronto:
kubectl get certificates.cert-manager.io -n ${EJBCA_NAMESPACE}
L'output dovrebbe mostrare:
NAME READY SECRET AGE
ejbca-test-certificate True ejbca-certificate 12s
ACME automatizzato con verifiche DNS-01
In questa sezione, configurerai il servizio ACME di EJBCA e utilizzerai le risorse DNS interne di GDC per automatizzare l'emissione di certificati convalidati dal dominio. In questo modo, i client cert-manager o Certbot standard possono richiedere i certificati utilizzando i protocolli ACME automatizzati standard.
Configura EJBCA per ACME
Per preparare il server, attiva il servizio ACME all'interno di EJBCA e configura un alias ACME con un resolver DNS dedicato. In questo modo, il server EJBCA viene preparato per elaborare e convalidare le risposte alle challenge DNS-01 all'interno di GDC:
- Nell'interfaccia utente amministratore di EJBCA, vai a System Configuration (Configurazione di sistema) > ACME Configuration (Configurazione ACME).
- Fai clic su Aggiungi e configura quanto segue:
- Nome:
default - Profilo dell'entità finale:
GDC TLS SERVER EE PROFILE - Wildcard Certificate Issuance Allowed: Check
- Tipi di verifica dell'identificatore DNS di convalida MPIC di Challenge Response:
Seleziona
dns-01 - Resolver DNS: inserisci l'IP del tuo DNS globale.
- Convalida DNSSEC: deseleziona (poiché si tratta di un ambiente privato locale)
- Nome:
- Fai clic su Salva.
Crea variabili di ambiente ACME
In questa sezione, creerai le seguenti variabili di ambiente per configurare il client Certbot. Modifica questi valori in base alle tue esigenze:
# ACME Alias created in the EJBCA configuration
export ACME_ALIAS="default"
# Arbitrary email address used for ACME registration
export ACME_EMAIL="your-email@example.com"
Registra il client Certbot
Successivamente, installi il client Certbot standard e lo registri con l'endpoint ACME privato di EJBCA. In questo modo viene stabilito l'account cliente attendibile necessario per eseguire operazioni automatiche sui certificati:
Installa
certbotsulla tua workstation. Ad esempio, per macOS:brew install certbotCrea cartelle locali per la configurazione e i log:
mkdir -p ./certbot/config ./certbot/work ./certbot/logsRegistra il client con l'endpoint della directory ACME EJBCA:
certbot register \ --config-dir ./certbot/config \ --work-dir ./certbot/work \ --logs-dir ./certbot/logs \ --server https://${EJBCA_HOSTNAME}/ejbca/acme/${ACME_ALIAS}/directory \ --email ${ACME_EMAIL} \ --agree-tos \ --no-eff-email
Emetti un certificato utilizzando la verifica DNS
Infine, esegui una richiesta Certbot manuale ed esegui il deployment di una risorsa TXT DNS GDC temporanea per risolvere la verifica DNS-01. In questo modo, viene convalidata la proprietà del dominio di destinazione e viene attivata l'emissione automatica dei certificati:
Esegui il comando di verifica manuale:
certbot certonly \ --manual \ --preferred-challenges dns \ --key-type rsa \ --rsa-key-size 2048 \ --config-dir ./certbot/config \ --work-dir ./certbot/work \ --logs-dir ./certbot/logs \ --server https://${EJBCA_HOSTNAME}/ejbca/acme/${ACME_ALIAS}/directory \ -d test.${EJBCA_DNS_ZONE}Il terminale si arresterà e mostrerà un valore di verifica. Output di esempio:
Please deploy a DNS TXT record under the name: _acme-challenge.test.example.internal. with the following value: q3pCmzXfIhsTpT4f4JAulHmHaAR3udC_9Wf1G498ER0 Before continuing, verify the TXT record has been deployed.Esegui il deployment del record TXT nel DNS globale con la stringa fornita da Certbot.
Attendi circa 30 secondi per la propagazione del DNS, torna al terminale Certbot e premi Invio.
Output di esempio:
Successfully received certificate. Certificate is saved at:./certbot/config/live/test.example.internal/fullchain.pem Key is saved at:./certbot/config/live/test.example.internal/privkey.pem This certificate expires on 2026-11-16. These files will be updated when the certificate renews.Verifica che il certificato sia stato scritto correttamente in
./certbot/config/live/test.${EJBCA_DNS_ZONE}/.