Glossaire cyber

CSR - Certificate Signing Request, génération 2026

CSR (Certificate Signing Request) : PKCS#10 RFC 2986, génération OpenSSL/cfssl/step, SAN obligatoire, automation ACME, validation et anti-patterns 2026.

Naim Aouaichia
17 min de lecture
  • Glossaire
  • CSR
  • PKI
  • Cryptographie
  • OpenSSL
  • Automation
  • DevSecOps

Le CSR (Certificate Signing Request) est le format de demande de certificat soumis à une Autorité de Certification (CA) pour obtenir un certificat X.509 signé. C'est la première étape obligatoire du cycle de vie d'un certificat : tu génères une paire de clés (privée + publique), tu encapsules la clé publique + des métadonnées (Subject, SANs, extensions) dans un CSR signé par ta clé privée, tu envoies à la CA qui vérifie l'identité et émet le certificat. Le format est standardisé par PKCS#10 (Public-Key Cryptography Standards #10) publié par RSA Labs en 1998 et formalisé par IETF RFC 2986 en novembre 2000, encodage PEM (RFC 7468 avril 2015) dominant en pratique. En 2026, le CSR est largement automatisé sous le capot par ACME (RFC 8555 mars 2019), cert-manager (CNCF Graduated 2024) et les services cloud managed (AWS ACM, Azure App Service Managed Cert, GCP Certificate Manager), l'ingénieur ne le manipule manuellement que dans 4-5 cas spécifiques : Private PKI mTLS avec workflow approval, EV/OV Web PKI exigeant Subject custom, code signing (Apple/Microsoft/Sigstore), Certificate Re-key Application (CRA), Hardware tokens/HSM où la clé ne peut pas quitter le device. Le CN (Common Name) est déprécié depuis 2017 par les Baseline Requirements CA/Browser Forum, Subject Alternative Names (SANs) sont obligatoires pour tous certs Web PKI 2026. Comprendre l'anatomie PKCS#10, la génération concrète (OpenSSL / cfssl Cloudflare / step Smallstep), la validation, les algorithmes 2026 (ECDSA P-256 préféré, RSA 2048-3072 legacy, Ed25519 émergent, ML-DSA post-quantum), et les anti-patterns est non-négociable pour tout ingénieur sécurité ou DevSecOps 2026.

Pour le contexte adjacent : voir PKI - Public Key Infrastructure pour l'umbrella infrastructure dont le CSR est la première étape.

1. Anatomie PKCS#10 et structure CSR

Un CSR PKCS#10 (RFC 2986) est une structure ASN.1 DER, généralement encodée en PEM (Base64 + headers -----BEGIN CERTIFICATE REQUEST-----).

ChampDescriptionExemple 2026
CertificationRequestInfoContainer principal-
versionPKCS#10 version0 (= v1, seule version définie)
subjectDistinguished Name (DN) du demandeurCN=app.example.com, O=Acme Corp, C=FR
subjectPKInfoAlgorithm + clé publiqueid-ecPublicKey + courbe P-256
attributesExtensions optionnelles (SANs, KU, EKU)subjectAltName obligatoire 2026
signatureAlgorithmAlgo de signature CSRecdsa-with-SHA256, sha256WithRSAEncryption
signatureSignature de CertificationRequestInfo par la clé privéeBytes

1.1 Distinguished Name (DN) - Subject

Le DN identifie le demandeur. Composants standards :

AttributCodeDescriptionObligatoire 2026
Common NameCNNom principal (déprécié si seul)Facultatif (SAN obligatoire)
OrganizationOOrganisation légaleEV/OV uniquement
Organizational UnitOUDéprécié 2022 (CA/B Forum)Ne plus utiliser
CountryCCode pays ISO 3166-1 alpha-2EV/OV uniquement
State or ProvinceSTÉtat/ProvinceEV/OV uniquement
LocalityLVilleEV/OV uniquement
Email AddressemailAddressEmail contactRare 2026
Domain ComponentDCComposant DNS legacyLegacy AD CS

Position tranchée 2026 : pour DV (Domain Validation) certs publics, un CN suffit + SANs. Pour OV/EV, ajouter O + C uniquement. Ne jamais utiliser OU depuis le ballot 2022 du CA/Browser Forum.

1.2 Subject Alternative Names (SANs) - obligatoire 2026

Les SANs étendent le DN avec une liste de noms d'identité. Types supportés :

Type SANCodeUsage
DNSdNSNameNoms de domaine (le plus courant)
IPiPAddressAdresses IPv4/IPv6 (rare en Web PKI public)
Emailrfc822NameEmail pour S/MIME
URIuniformResourceIdentifierIdentifiants applicatifs
OtherotherNameCustom (rare)

Chrome 58 a refusé en mai 2017 les certs sans SANs. Depuis, toutes les CAs publiques refusent les CSR sans SAN. Anti-pattern absolu en 2026.

2. Génération de CSR avec OpenSSL en 2026

2.1 Pattern recommandé : config file + ECDSA P-256

# 1. Créer le fichier de configuration OpenSSL avec SANs
cat > csr.cnf <<'EOF'
[ req ]
default_bits       = 2048
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions     = v3_req
prompt             = no
 
[ req_distinguished_name ]
CN = app.example.com
O  = Acme Corp
C  = FR
 
[ v3_req ]
subjectAltName = @alt_names
keyUsage       = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
 
[ alt_names ]
DNS.1 = app.example.com
DNS.2 = www.example.com
DNS.3 = api.example.com
EOF
 
# 2. Générer la clé privée ECDSA P-256 (recommandé 2026)
openssl ecparam -name prime256v1 -genkey -noout -out app.key
 
# 3. Générer le CSR avec config
openssl req -new \
  -key app.key \
  -out app.csr \
  -config csr.cnf
 
# 4. Vérifier le CSR généré
openssl req -text -noout -verify -in app.csr
 
# Output attendu :
# Certificate Request:
#     Data:
#         Version: 1 (0x0)
#         Subject: CN=app.example.com, O=Acme Corp, C=FR
#         Subject Public Key Info:
#             Public Key Algorithm: id-ecPublicKey
#                 Public-Key: (256 bit)
#                 ASN1 OID: prime256v1
#                 NIST CURVE: P-256
#         Requested Extensions:
#             X509v3 Subject Alternative Name:
#                 DNS:app.example.com, DNS:www.example.com, DNS:api.example.com
#             X509v3 Key Usage: critical
#                 Digital Signature, Key Encipherment
#             X509v3 Extended Key Usage:
#                 TLS Web Server Authentication, TLS Web Client Authentication
#     Signature Algorithm: ecdsa-with-SHA256

2.2 Pattern one-liner avec -addext (OpenSSL 1.1.1+)

# Génération clé + CSR en une commande (utile en automation)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes \
  -keyout app.key -out app.csr \
  -subj "/CN=app.example.com/O=Acme Corp/C=FR" \
  -addext "subjectAltName=DNS:app.example.com,DNS:www.example.com,DNS:api.example.com" \
  -addext "keyUsage=critical,digitalSignature,keyEncipherment" \
  -addext "extendedKeyUsage=serverAuth,clientAuth"
 
# RSA 3072 alternative (si compliance exige RSA)
openssl req -new -newkey rsa:3072 -nodes \
  -keyout app.key -out app.csr \
  -subj "/CN=app.example.com" \
  -addext "subjectAltName=DNS:app.example.com,DNS:www.example.com"

2.3 Pattern cfssl (Cloudflare) - JSON déclaratif

# Install cfssl
go install github.com/cloudflare/cfssl/cmd/cfssl@latest
go install github.com/cloudflare/cfssl/cmd/cfssljson@latest
 
# Config JSON
cat > csr-config.json <<'EOF'
{
  "CN": "app.example.com",
  "key": {
    "algo": "ecdsa",
    "size": 256
  },
  "names": [
    {
      "O": "Acme Corp",
      "C": "FR"
    }
  ],
  "hosts": [
    "app.example.com",
    "www.example.com",
    "api.example.com",
    "10.0.1.42"
  ]
}
EOF
 
# Générer clé + CSR
cfssl genkey csr-config.json | cfssljson -bare app
 
# Output : app.csr + app-key.pem

2.4 Pattern step (Smallstep) - le plus ergonomique 2026

# Install step CLI
brew install step  # macOS
# OR
curl -sLO https://github.com/smallstep/cli/releases/latest/download/step_linux_amd64.tar.gz
 
# Génération en une commande avec SANs et KU/EKU
step certificate create app.example.com app.csr app.key \
  --csr \
  --san www.example.com \
  --san api.example.com \
  --san IP:10.0.1.42 \
  --kty EC \
  --crv P-256 \
  --not-after 2160h  # Validity hint (90 jours, peut être ignoré par CA)
 
# Vérification
step certificate inspect app.csr

3. Validation d'un CSR

Avant de soumettre à une CA, toujours valider le CSR :

# Validation OpenSSL standard
openssl req -text -noout -verify -in app.csr
 
# Vérifications critiques :
# 1. Signature valide ? Output: "verify OK" requis
# 2. Subject correct ?
# 3. SANs présents et corrects ?
# 4. Public Key algorithm + size adéquats ?
# 5. KeyUsage et ExtendedKeyUsage corrects ?
 
# Comparer hash clé privée vs CSR (s'assurer que CSR est signé par la bonne clé)
openssl pkey -in app.key -pubout -outform DER | sha256sum
openssl req -in app.csr -pubkey -noout -outform DER 2>/dev/null | sha256sum
# Les deux hash doivent être identiques
 
# Outils online (utiliser uniquement pour CSR non-sensibles, jamais en prod)
# - DigiCert SSL Tools : https://ssltools.digicert.com/checker/views/csrCheck.jsp
# - SSL Shopper : https://www.sslshopper.com/csr-decoder.html

4. Algorithmes et tailles de clé recommandés 2026

AlgorithmeTaille minimale 2026Use caseStatus 2026
RSA2048 (deprecated 1024 depuis 2014)Legacy, broad compatibilityAcceptable mais legacy
RSA3072Banking, gov complianceRecommandé compliance
RSA4096Long-lived root CAsOverkill pour leaf certs
ECDSA P-256256 bits (équivalent RSA 3072)Web PKI, mTLSRecommandé 2026
ECDSA P-384384 bits (équivalent RSA 7680)Compliance forte, govPremium
ECDSA P-521521 bitsTrès rare, overkillÀ éviter
Ed25519256 bitsSSH, Private PKI moderneÉmergent Web PKI
Ed448448 bitsCompliance forte alternativeRare
ML-DSA-44 (Dilithium2)NIST FIPS 204Post-quantum signaturePilote 2024-2026
ML-DSA-65 (Dilithium3)NIST FIPS 204Post-quantum, niveau sécurité 3Pilote 2024-2026

Position tranchée 2026 : pour Web PKI public et mTLS service-to-service, ECDSA P-256 est la recommandation par défaut, équivalent sécurité RSA 3072, signature 5-10× plus rapide, certificat 50 % plus petit (~500 bytes vs ~1.5 KB), bandwidth économisé en TLS handshake. RSA 3072 acceptable si compliance gov/banking exige explicitement RSA. Éviter RSA 2048 pour nouveaux certs longue durée (post-quantum risk).

5. Algorithmes de signature CSR

L'algo de signature du CSR doit être au moins équivalent à la clé. Standard 2026 :

Algorithme signatureCode OIDRecommandation 2026
MD5md5WithRSAEncryptionInterdit (CA/B Forum 2014)
SHA-1sha1WithRSAEncryptionInterdit (CA/B Forum 2017, broken 2017 SHAttered)
SHA-256sha256WithRSAEncryptionStandard 2026
SHA-384sha384WithRSAEncryptionPremium
SHA-512sha512WithRSAEncryptionRare
ECDSA SHA-256ecdsa-with-SHA256Recommandé avec ECDSA P-256
ECDSA SHA-384ecdsa-with-SHA384ECDSA P-384
Ed25519Ed25519 (built-in)SSH/private PKI moderne
ML-DSAid-ml-dsa-44/65/87Post-quantum FIPS 204 (août 2024)

Anti-pattern : CSR signé en SHA-1 → refus immédiat de toute CA publique depuis 2017. Toujours -sha256 minimum dans OpenSSL.

6. Stack outillage CSR moderne 2026

6.1 Comparaison outils

OutilForce 2026ErgonomieUse case
OpenSSLRéférence universelle, présent partoutMoyenne (config files)Tous
cfssl (Cloudflare)JSON déclaratif, automation friendlyBonneDevOps, K8s
step CLI (Smallstep)Le plus ergonomique 2026, ACME natifExcellenteDevSecOps moderne
certbotAuto via ACME Let's EncryptN/A (caché)Web PKI public
acme.shBash, multi-CA supportN/A (caché)Multi-cloud
HashiCorp Vault PKIDynamic secrets, court TTLBonne (CLI + API)mTLS microservices
AWS Private CAManagé AWSVariableAWS-centric
Azure Key VaultManagé Azure, intégration AKSMoyenneAzure-centric
HSM via PKCS#11Clé privée jamais en RAM hostFaible (vendor-specific)Compliance forte
TPM 2.0Hardware-bound cléFaibleEndpoint sécurité

6.2 Pattern moderne : cert-manager Kubernetes auto-CSR

Configuration cert-manager (CNCF Graduated 2024) où le CSR est généré automatiquement :

# Aucun CSR à manipuler manuellement - cert-manager fait tout
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: app-tls
  namespace: production
spec:
  secretName: app-tls-secret
  duration: 2160h        # 90 jours
  renewBefore: 720h       # Renew 30 jours avant
  subject:
    organizations:
      - Acme Corp
  privateKey:
    algorithm: ECDSA
    size: 256
    rotationPolicy: Always   # Nouvelle clé à chaque renew
  dnsNames:
    - app.example.com
    - www.example.com
    - api.example.com
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
    group: cert-manager.io

cert-manager génère automatiquement la clé ECDSA P-256, construit le CSR avec SANs, soumet via ACME à Let's Encrypt, stocke le cert dans Secret Kubernetes. Zero CSR manuel, automation totale. C'est le pattern 2026 dominant en production K8s.

7. Cas d'usage où CSR manuel reste obligatoire en 2026

Malgré l'automation ACME + cert-manager, 5 cas nécessitent CSR manuel 2026 :

CasPourquoi CSR manuelOutil recommandé
EV/OV Web PKI (banking, gov)CA exige Subject custom (O, C, ST validation manuelle)OpenSSL + DigiCert / Sectigo workflow
Code signing certs (Apple, Microsoft)Subject + EKU spécifiques par platformOpenSSL + Apple Developer / Microsoft Trusted Root portal
Sigstore Cosign keylessOIDC-based mais CSR généré sous le capotCosign CLI
HSM-bound private key (FIPS 140-3 Level 3)Clé privée ne peut pas quitter le HSMPKCS#11 + HSM-specific tooling
CRA (Certificate Re-key Application)Rotation clé avec Subject identiqueOpenSSL ou step rekey

8. Erreurs fréquentes CSR et anti-patterns

ErreurSymptômeFix
CN sans SANCA refuse, browsers reject (Chrome 58+)Toujours inclure SAN, même si CN présent
Clé privée stockée en plain dans GitCompromission garantieUtiliser Vault dynamic secrets, GPG, sealed-secrets
CSR généré via outil onlineClé privée potentiellement leakéeOpenSSL/cfssl/step en local uniquement
RSA 1024 ou SHA-1Refus CA depuis 2014/2017RSA 2048+ minimum, SHA-256+ obligatoire
OU encore présent dans SubjectDéprécié CA/B Forum 2022Supprimer OU des nouveaux CSR
Pas de KeyUsage / ExtendedKeyUsageCert utilisable de manière imprévueKU + EKU explicites dans CSR
Différence Subject entre CSR et form CACA reject ou émet cert non-conformeVérifier openssl req -text -noout -in csr.pem avant submit
CSR avec SAN IP en Web PKI publicRefus CA publique (déprécié 2015)IP SAN OK uniquement Private PKI
Long-lived clé privée (> 1 an)Crypto-agility nulleRotation 90 jours + automation ACME
Pas de monitoring expiration cert post-CSROutage prodPrometheus blackbox + alertes

9. Workflow CSR + ACME + automation 2026

Pipeline mature 2026 pour Web PKI public sur Kubernetes :

[Application]


[cert-manager Certificate resource]

    │ génère automatiquement :
    ├─► clé privée ECDSA P-256
    ├─► CSR PKCS#10 avec SANs + KU + EKU
    └─► soumission ACME challenge


[Let's Encrypt CA via ACME RFC 8555]

    ├─► HTTP-01 challenge (TLS-ALPN-01 ou DNS-01 selon)
    ├─► validation domaine
    └─► émission cert signé


[Kubernetes Secret tls-secret]

    │ contient :
    ├─► tls.crt (cert signed)
    └─► tls.key (private key)


[Ingress / Gateway] mount le Secret pour TLS termination


[Trafic HTTPS production]

    │ 30 jours avant expiration :

[cert-manager re-génère NEW key + CSR + cert]

    │ rotation transparente

[Application restart automatique ou hot-reload]

Position tranchée 2026 : ce pattern automation totale est devenu le défaut Kubernetes, aucun CSR manuel sur le chemin production. L'ingénieur ne touche au CSR que pour debugging ou cas spéciaux.

10. Mapping CSR vers compliance frameworks 2026

FrameworkExigenceMapping CSR
CA/Browser Forum Baseline RequirementsSAN obligatoire, OU déprécié 2022, validity max 398j → 90jCSR doit conformer
NIST FIPS 203/204/205 (août 2024)Standards PQC officielsCSR avec ML-DSA en 2026-2027 pilote
NIST SP 800-57Key Management RecommendationsCSR taille clé conforme
NIST SP 800-131AAlgorithm transitionsRSA 2048+ et SHA-256+ obligatoires
PCI-DSS v4.0 (mars 2022, mandatory mars 2025)Req 4 (encryption strong)CSR algos approuvés
NIS2 (transposée FR octobre 2024)Article 21 (cryptographie)CSR avec algos forts
DORA (UE applicable janvier 2025)Article 9 (ICT security)Crypto-agility, CSR ML-DSA prep
ISO/IEC 27001:2022A.8.24 (Cryptography)CSR conforme politique crypto
eIDAS 2.0 (UE)Qualified certificatesCSR conforme Annexe IV
Common Criteria EAL4+Gov/defenseHardware-bound CSR via HSM

11. Pour aller plus loin

12. Points clés à retenir

  • CSR = Certificate Signing Request, format PKCS#10 standardisé par RSA Labs 1998 + IETF RFC 2986 novembre 2000, encodage PEM (RFC 7468 avril 2015).
  • Anatomie : Subject (DN) + Public Key + SANs + Extensions + Signature par clé privée du demandeur.
  • CN seul déprécié depuis 2017 (CA/B Forum + Chrome 58 mai 2017). SANs obligatoires pour tous certs Web PKI 2026.
  • OU déprécié depuis ballot CA/B Forum 2022, ne plus utiliser dans Subject.
  • Algorithmes 2026 : ECDSA P-256 recommandé par défaut, RSA 2048-3072 acceptable, Ed25519 émergent, ML-DSA (FIPS 204 août 2024) en pilote post-quantum.
  • Algorithmes signature 2026 : SHA-256+ obligatoire. SHA-1 et MD5 interdits depuis 2014-2017. ML-DSA pour PQC.
  • Outils 2026 : OpenSSL (référence), cfssl (Cloudflare, JSON), step (Smallstep, ergonomie maximale), HashiCorp Vault PKI, AWS Private CA, Azure Key Vault.
  • Automation totale via ACME (RFC 8555 mars 2019) + cert-manager (CNCF Graduated 2024), CSR généré sous le capot, zero manipulation manuelle en pattern Kubernetes moderne.
  • 5 cas où CSR manuel reste obligatoire 2026 : EV/OV Web PKI, code signing (Apple, Microsoft), Sigstore Cosign, HSM-bound keys, CRA (rekey).
  • Sigstore Cosign = modèle keyless signing CNCF Graduated 2024, certs éphémères 10 min via Fulcio + Rekor transparency log, recommandé CI/CD container signing.
  • Validation systématique avant submit : openssl req -text -noout -verify -in csr.pem. Vérifier signature, Subject, SANs, KU/EKU, Public Key adéquats.
  • Anti-pattern n°1 : utiliser un outil online qui stocke la clé privée → compromission garantie. Toujours générer en local.
  • Anti-pattern n°2 : CSR avec CN seul sans SAN → refus toutes CAs publiques depuis 2017.
  • Compliance : CSR mappe CA/Browser Forum Baseline Requirements (SAN obligatoire, OU déprécié, validity 90j émergent), NIST FIPS 203/204/205, NIST SP 800-57 + 800-131A, PCI-DSS v4.0 Req 4, NIS2 article 21, DORA article 9, ISO 27001:2022 A.8.24, eIDAS 2.0.

Questions fréquentes

  • Le CSR existe-t-il encore en 2026 avec ACME et cert-manager qui automatisent tout ?
    **Oui, mais largement masqué côté Web PKI**. **ACME** (RFC 8555) et **cert-manager** (CNCF Graduated 2024) génèrent automatiquement le CSR sous le capot quand tu déclares une `Certificate` resource Kubernetes ou que `certbot` demande un cert. Tu ne le vois jamais. **Cas où tu manipules encore le CSR manuellement en 2026** : (1) **Private PKI** pour mTLS service-to-service avec processus d'approbation manuel ; (2) **EV / OV certificates** Web PKI où la CA exige des champs Subject spécifiques (banking, gov) ; (3) **Code signing certificates** (Apple, Microsoft, Sigstore) ; (4) **CRA (Certificate Re-key Application)** pour rotation de clé sans changer le subject ; (5) **Hardware tokens / HSM** où la clé privée ne peut pas quitter le device, le CSR est généré côté HSM. Position 2026 : maîtriser le CSR reste **non-négociable** pour ingénieur sécurité même si l'usage quotidien est automatisé.
  • Pourquoi le CN (Common Name) est-il déprécié en 2026 et SAN obligatoire ?
    **CN deprecated depuis 2017** par les Baseline Requirements du CA/Browser Forum (effective Septembre 2017) et **Chrome 58 a refusé en mai 2017** les certs sans SAN. Aujourd'hui en 2026, **TOUTES** les CAs publiques (Let's Encrypt, DigiCert, Sectigo, Google Trust Services) refusent les CSR sans **Subject Alternative Names (SANs)**. La raison technique : CN était limité à un seul nom + ambigu (qui valide quel nom ?), SAN supporte multi-domaines + types explicites (DNS, IP, email, URI). Position 2026 : **TOUJOURS** inclure les SANs dans le CSR, **même** si tu inclues encore le CN par habitude. Beaucoup d'outils (cfssl, step) génèrent automatiquement le SAN à partir du CN si non spécifié, mais ne pas se reposer sur ce fallback. Anti-pattern : CSR avec uniquement CN, validation côté CA échoue silencieusement ou émet un cert non-trusté.
  • Quelle taille de clé et quel algorithme pour un CSR moderne en 2026 ?
    **Recommandations 2026** : pour Web PKI public → **ECDSA P-256** (équivalent sécurité RSA 3072, signature 5-10× plus rapide, taille cert 50 % plus petite). RSA 2048 acceptable mais legacy. **RSA 3072+** si compliance gov/banking exige RSA. **Ed25519** rare en 2026 pour Web PKI (toutes CAs ne le supportent pas, à vérifier) mais excellent en Private PKI / SSH. **Post-Quantum 2026** : **NIST FIPS 204 ML-DSA** (Dilithium) commence à apparaître en hybrid certs (RSA+ML-DSA, ECDSA+ML-DSA) chez Cloudflare, Google. Pour Private PKI : commencer à tester ML-DSA dès 2025-2026 pour préparer la migration. Pour Web PKI : attendre 2027-2028 quand les CAs publiques supporteront PQC nativement. Anti-pattern : RSA 1024 ou MD5/SHA1 signature → refus CA depuis 2014. Toujours vérifier `openssl req -text -noout -in csr.pem` que `Public-Key` est ≥ RSA 2048 ou ECDSA P-256.
  • Comment générer un CSR avec OpenSSL en 2026 - commandes exactes ?
    **Trois patterns 2026**. (1) **OpenSSL classique multi-line** avec config file `openssl.cnf` pour SANs (recommandé). (2) **OpenSSL one-liner** avec `-addext` flag (depuis OpenSSL 1.1.1, utile pour automation). (3) **cfssl** (Cloudflare) ou **step** (Smallstep) avec config JSON déclarative pour reproductibilité. Commandes : `openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes -keyout app.key -out app.csr -subj "/CN=app.example.com/O=Acme Corp/C=FR" -addext "subjectAltName=DNS:app.example.com,DNS:www.example.com" -addext "keyUsage=digitalSignature,keyEncipherment" -addext "extendedKeyUsage=serverAuth"`. Vérifier avec `openssl req -text -noout -verify -in app.csr`. Pour certs intermediates / code signing → utiliser `step certificate create --csr` plus ergonomique. Anti-pattern : générer le CSR via UI tools obscurs où la **clé privée est stockée chez le tier** = compromission garantie.
  • CSR via outil cloud (AWS ACM, Azure Key Vault) ou CSR self-managed - lequel choisir ?
    **Cas par cas selon contexte**. **AWS ACM** (Certificate Manager) gère **automatiquement** le CSR pour les certs publics AWS (CloudFront, ALB, API Gateway), tu ne vois jamais le CSR. Pour **AWS Private CA**, tu peux soumettre un CSR custom. **Azure Key Vault Certificates** : option soit AKV génère la clé + CSR + auto-CA (DigiCert / GlobalSign intégrés), soit tu fournis ton propre CSR. **Google Cloud Certificate Manager** : auto avec Google-managed certs ou self-managed certs avec CSR import. Position 2026 : pour **Web PKI public sur cloud** → laisser le cloud provider gérer (AWS ACM, Azure App Service Managed Cert, GCP managed cert). Pour **Private PKI mTLS** ou **certs spéciaux** (EV, code signing) → CSR self-managed avec OpenSSL/step/cfssl + automation pipeline. Anti-pattern : générer le CSR sur ta laptop puis stocker la clé privée en plain dans un repo Git, utiliser HSM ou Vault PKI dynamic secrets.

Écrit par

Naim Aouaichia

Cyber Security Engineer et fondateur de Zeroday Cyber Academy

Ingénieur cybersécurité avec un parcours hybride : développement, DevOps Capgemini, DevSecOps IN Groupe (sécurité des documents d'identité régaliens), audits CAC 40. Fondateur de Hash24Security et Zeroday Cyber Academy. Présence LinkedIn 43 000 abonnés, Substack Zeroday Notes 23 000 abonnés.