Skip to main content
Argo CD provides three inbound TLS endpoints that should be configured with proper certificates. By default, these endpoints use automatically generated, self-signed certificates.

Quick Reference

Certificate Configuration

Inter-Component TLS

Configuring argocd-server TLS

Inbound TLS Options

Configure TLS parameters for the API server:

Certificate Priority

Argo CD determines which certificate to use in this order:
1

argocd-server-tls Secret

Recommended: Dedicated TLS secret for argocd-server
This secret is safe to manage via third-party tools like cert-manager or Sealed Secrets.
2

argocd-secret Secret

Deprecated: Legacy location for TLS certificateOnly used if argocd-server-tls doesn’t exist. Not recommended for new deployments.
3

Auto-generated Certificate

If neither secret contains a certificate, Argo CD generates and persists a self-signed certificate in argocd-secret.
Argo CD automatically detects changes to argocd-server-tls without requiring a restart.

Using cert-manager

Automate certificate management with cert-manager:

Configuring argocd-repo-server TLS

Inbound TLS Options

Certificate Configuration

Create the argocd-repo-server-tls secret:
Important: The certificate must include the correct SAN entries:
  • DNS:argocd-repo-server
  • DNS:argocd-repo-server.argocd.svc
  • DNS:argocd-repo-server.argocd.svc.cluster.local

Self-Signed Certificates

If using a self-signed certificate, add the CA certificate:
Unlike argocd-server, argocd-repo-server requires a pod restart to pick up certificate changes.

Enable Strict TLS Validation

By default, components use non-validating TLS connections to argocd-repo-server. To enable strict validation:
1

Create Persistent Certificate

Create the argocd-repo-server-tls secret as shown above.
2

Restart repo-server

3

Enable Strict TLS

Add --repo-server-strict-tls parameter to connecting components:
Certificate Expiry: Ensure certificates have adequate lifetime. When replacing certificates, all workloads must be restarted.

Configuring argocd-dex-server TLS

Inbound TLS Options

Certificate Configuration

Create the argocd-dex-server-tls secret:
Similar to repo-server, include correct SAN entries:
  • DNS:argocd-dex-server
  • DNS:argocd-dex-server.argocd.svc

Enable Strict TLS Validation

1

Create Certificate

Create the argocd-dex-server-tls secret.
2

Restart dex-server

3

Enable Strict TLS in argocd-server

Service Mesh / mTLS Configuration

In service mesh environments with sidecar proxies (e.g., Istio, Linkerd), you may want to disable TLS between Argo CD components and let the mesh handle encryption.

Disable TLS to repo-server

1

Configure repo-server

Disable TLS and restrict to loopback:
Listening on localhost prevents direct network access while allowing sidecar communication.
2

Configure Clients

Set plaintext mode on all clients:
3

Configure Service Address

Point to sidecar proxy instead of direct service:

Disable TLS to dex-server

1

Configure dex-server

2

Configure argocd-server

Complete Configuration Examples

Production Setup with cert-manager

Internal PKI Setup

  1. Create internal CA
  2. Install CA as cluster resource
  3. Configure cert-manager with internal CA
  4. Request certificates Use the Certificate resources shown in previous examples.

Troubleshooting

Symptom: New certificate not being usedSolution:
  • For argocd-server: Wait up to 60 seconds (hot reload)
  • For argocd-repo-server and argocd-dex-server: Restart pods
Symptom: x509: certificate is valid for X, not YSolution: Ensure SAN entries match the DNS names used by clients:
Symptom: x509: certificate signed by unknown authoritySolutions:
  1. Add ca.crt to the TLS secret
  2. Enable strict TLS validation with proper CA trust
  3. Or use --repo-server-plaintext if in service mesh
Check certificate status:
Common issues:
  • DNS not resolving for ACME challenges
  • Rate limiting from Let’s Encrypt
  • Incorrect issuer configuration

Best Practices

Use cert-manager

Automate certificate lifecycle management and rotation

Enable Strict TLS

Validate certificates for inter-component communication

Monitor Expiry

Set up alerts for certificates expiring within 30 days

Use Strong Ciphers

Configure TLS 1.2+ and modern cipher suites only
Never commit private keys to Git. Use secret management solutions like Sealed Secrets or External Secrets Operator.

Security Overview

Comprehensive security architecture and threat model

Secrets Management

Best practices for managing secrets

Signed Releases

Verify Argo CD artifacts and images

cert-manager

Kubernetes certificate management