CSR.pluscsr.plus

Référence de l'API CSR.plus

Automatisez tout le cycle de vie des certificats SSL/TLS avec une seule API REST ouverte — génération CSR, décodage, notation A–F, transparence des certificats, CAA, révocation et traçage TLS. Gratuit, sans authentification, sans clé API.

Essayez l'API en direct

Aperçu

L'API CSR.plus est un ensemble de points de terminaison en lecture seule et de génération qui alimentent nos outils web. Chaque point de terminaison renvoie du JSON, prend en charge CORS pour les navigateurs et est limité par adresse IP. Les clés et les CSR sont générés en mémoire et jamais stockés.

Tout ce dont vous avez besoin : générer un CSR et une clé privée, décoder n'importe quel CSR, noter un déploiement de A à F, rechercher les journaux de transparence, vérifier les enregistrements CAA, valider l'état de révocation et tracer une poignée de main TLS complète.

URL de base et authentification

Base URL
https://csr.plus

Tous les points de terminaison sont servis en HTTPS. Aucune authentification n'est requise — l'API est ouverte et non authentifiée par conception. Pas de clés API, de jetons ni de facturation. Les requêtes sont identifiées par adresse IP uniquement pour la limitation de débit.

Toutes les réponses incluent des en-têtes CORS (Access-Control-Allow-Origin: *), vous pouvez donc appeler l'API directement depuis les navigateurs et les scripts côté client.

Limites de débit

Point de terminaisonLimiteFenêtre
/api/generate10 requêtespar minute et par IP
/api/ssl-check, /api/ct, /api/caa30 requêtespar minute et par IP
/api/revocation, /api/ssl-tracer20 requêtespar minute et par IP
/api/decode, /api/openssl-traceNon limité—

Dépasser une limite renvoie HTTP 429 avec un en-tête Retry-After indiquant le nombre de secondes à attendre.

POST/api/generate

Génère une demande de signature de certificat et une clé privée. Limite : 10 requêtes par minute et par IP.

Corps de la requête

ParamètreTypeRequisDescription
common_namestringOuiDomaine principal (ex. example.com)
sansarrayNonNoms alternatifs supplémentaires, ex. ["www.example.com"]
organizationstringNonNom de l'organisation (O)
org_unitstringNonUnité organisationnelle (OU)
countrystringNonCode pays à deux lettres (C), ex. "US"
statestringNonÉtat ou province (ST)
localitystringNonLocalité / ville (L)
emailstringNonAdresse e-mail de contact
key_typestringNon"rsa" (défaut) ou "ecdsa"
key_sizestring|intNonRSA : 2048 (défaut) / 3072 / 4096 · ECDSA : "P-256" (défaut) / "P-384"
passphrasestringNonChiffre la clé privée en PEM PKCS#8 chiffré (max 200 caractères)

Champs de réponse

ChampDescription
csrDemande de signature de certificat au format PEM (PKCS#10, signature SHA-256)
private_keyClé privée au format PEM (PKCS#8 ; PKCS#8 chiffré si une phrase de passe est fournie)
algorithmAlgorithme utilisé, ex. "RSA-2048" ou "ECDSA-P-256"
created_atHorodatage ISO 8601 de la génération
Exemple de requête (cURL)
curl -X POST https://csr.plus/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "common_name": "example.com",
    "sans": ["www.example.com", "api.example.com"],
    "organization": "Example Inc",
    "country": "US",
    "key_type": "rsa",
    "key_size": 2048
  }'
Exemple de réponse
{
  "csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIICzDCCAbQCAQAwgYwxCzAJBgNVBAYTAVVT...\n-----END CERTIFICATE REQUEST-----",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASC...\n-----END PRIVATE KEY-----",
  "algorithm": "RSA-2048",
  "created_at": "2026-08-14T10:30:00.000Z"
}
Vérifier le résultat avec OpenSSL
openssl req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20
POST/api/decode

Analyse n'importe quel CSR PKCS#10 et renvoie son sujet, ses noms alternatifs, sa clé publique, la vérification de signature et ses extensions.

Corps de la requête

ParamètreTypeRequisDescription
csrstringOuiLe CSR au format PEM (-----BEGIN CERTIFICATE REQUEST-----)
Exemple de requête (cURL)
curl -X POST https://csr.plus/api/decode \
  -H "Content-Type: application/json" \
  -d '{"csr": "-----BEGIN CERTIFICATE REQUEST-----\n..."}'
Exemple de réponse
{
  "success": true,
  "subject": {
    "commonName": "example.com",
    "organization": "Example Inc",
    "organizationalUnit": null,
    "country": "US",
    "state": "California",
    "locality": "San Francisco",
    "email": null
  },
  "publicKey": { "type": "RSA", "size": 2048 },
  "signature": { "algorithm": "sha256WithRSAEncryption", "verified": true },
  "sanList": ["example.com", "www.example.com", "api.example.com"],
  "extensions": [],
  "size": 640,
  "version": 0,
  "timestamp": "2026-08-14T10:30:00.000Z"
}

Remarque : dcvInfo contient des indices de validation de contrôle du domaine (fichiers de jeton HTTP et enregistrement CNAME) utiles pour terminer les étapes de validation CA.

GET/api/ssl-check?domain={domain}

Vérification SSL/TLS complète avec une note A–F de style SSL Labs : validité du certificat, correspondance du nom d'hôte, confiance de la chaîne, sondes de versions TLS et inspection HSTS.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiNom d'hôte à vérifier (port 443 supposé)
Exemple de requête
curl "https://csr.plus/api/ssl-check?domain=example.com"
Exemple de réponse
{
  "success": true,
  "domain": "example.com",
  "grade": {
    "letter": "A+",
    "score": 100,
    "label": "Excellent configuration with HSTS",
    "checks": [
      { "name": "Hostname match", "status": "pass", "detail": "Certificate covers the requested hostname" },
      { "name": "TLS 1.3", "status": "pass", "detail": "TLS 1.3 is supported" }
    ]
  },
  "cert": {
    "subject": "CN=example.com",
    "issuer": "CN=R10,O=Let's Encrypt,C=US",
    "validFrom": "2026-05-14T00:00:00.000Z",
    "validTo": "2026-08-12T00:00:00.000Z",
    "daysRemaining": 30,
    "san": ["example.com", "www.example.com"]
  },
  "tls": { "tls13": true, "tls12": true, "tls11": false, "tls10": false, "protocol": "TLSv1.3" },
  "hsts": { "present": true, "maxAge": 31536000, "includeSubDomains": true, "preload": false }
}
GET/api/ct?domain={domain}

Recherche dans les journaux publics de transparence des certificats tous les certificats émis pour un domaine. Repli sur Cert Spotter si crt.sh est indisponible.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiDomaine à rechercher dans les journaux CT
Exemple de requête
curl "https://csr.plus/api/ct?domain=example.com"
Exemple de réponse
{
  "success": true,
  "count": 12,
  "source": "crt.sh",
  "certs": [
    {
      "id": 123456,
      "logged_at": "2026-08-01T12:00:00.000Z",
      "not_before": "2026-07-15T00:00:00.000Z",
      "not_after": "2026-10-13T00:00:00.000Z",
      "common_name": "example.com",
      "name_value": "example.com\nwww.example.com"
    }
  ]
}

La réponse inclut source (crt.sh ou certspotter) pour savoir quel fournisseur a servi les données.

GET/api/caa?domain={domain}

Renvoie les enregistrements DNS CAA d'un domaine ainsi que les enregistrements A, AAAA, NS et MX, montrant quelles autorités de certification sont autorisées à émettre des certificats.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiDomaine à interroger
Exemple de requête
curl "https://csr.plus/api/caa?domain=example.com"
Exemple de réponse
{
  "success": true,
  "domain": "example.com",
  "caa": [
    { "flags": 0, "tag": "issue", "value": "letsencrypt.org" },
    { "flags": 0, "tag": "iodef", "value": "mailto:[email protected]" }
  ],
  "a": ["93.184.216.34"],
  "aaaa": ["2606:2800:220:1:248:1893:25c8:1946"],
  "ns": ["a.iana-servers.net"],
  "mx": [],
  "caaError": ""
}
GET/api/revocation?domain={domain}

Récupère le certificat actuellement servi par un domaine et indique ses points de distribution CRL et ses points de terminaison OCSP.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiDomaine dont le certificat servi est inspecté
Exemple de requête
curl "https://csr.plus/api/revocation?domain=example.com"
Exemple de réponse
{
  "success": true,
  "domain": "example.com",
  "serial": "03F2A1B3C4D5E6F7",
  "crlUrls": ["http://crl.letsencrypt.org/r3.crl"],
  "ocspUrls": ["http://r3.o.lencr.org"],
  "status": "good"
}
GET/api/ssl-tracer?domain={domain}&port={port}

Effectue une véritable poignée de main TLS avec n'importe quel hôte et port, en enregistrant la résolution DNS, la connectivité TCP, la version et le chiffrement TLS négociés, et la chaîne de certificats complète.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiNom d'hôte auquel se connecter
portintNonPort TCP (défaut 443)
Exemple de requête
curl "https://csr.plus/api/ssl-tracer?domain=example.com&port=443"
Exemple de réponse
{
  "success": true,
  "host": "example.com",
  "port": 443,
  "dns": { "ips": ["93.184.216.34"], "ms": 12 },
  "tcp": { "ok": true, "ms": 38 },
  "tls": { "version": "TLSv1.3", "cipher": "TLS_AES_128_GCM_SHA256", "weak": false },
  "certs": [
    {
      "subject": { "CN": "example.com" },
      "issuer": { "CN": "R10", "O": "Let's Encrypt", "C": "US" },
      "serialNumber": "03F2A1B3C4D5E6F7",
      "notBefore": "2026-05-14T00:00:00.000Z",
      "notAfter": "2026-08-12T00:00:00.000Z",
      "daysRemaining": 30,
      "expired": false,
      "isCA": false,
      "isSelfSigned": false,
      "keyType": "RSA",
      "keySize": 2048,
      "sha256": "E8:2F:0A:..."
    }
  ],
  "chainComplete": true,
  "chainNote": "Chain resolves to a trusted root",
  "errors": []
}
GET/api/openssl-trace?domain={domain}

Exécute une poignée de main openssl s_client brute contre un domaine et renvoie la sortie détaillée complète — utile pour déboguer les problèmes de chaîne et de protocole.

Paramètres de requête

ParamètreTypeRequisDescription
domainstringOuiDomaine à tracer (port 443 supposé)
Exemple de requête
curl "https://csr.plus/api/openssl-trace?domain=example.com"
Exemple de réponse
{
  "success": true,
  "output": "CONNECTED(00000005)\ndepth=2 C=US, O=Internet Security Research Group...\nverify return:1\n..."
}

Codes d'erreur

Les erreurs sont renvoyées en JSON avec un message error et, le cas échéant, un errorId pour un traitement programmatique.

StatuterrorIdSignification
400invalid_jsonLe corps de la requête n'est pas un JSON valide
400invalid_common_namecommon_name est manquant ou dépasse 253 caractères
400invalid_key_typekey_type doit être "rsa" ou "ecdsa"
400invalid_key_sizeLes tailles RSA doivent être 2048/3072/4096 ; les courbes ECDSA "P-256"/"P-384"
400invalid_passphrasepassphrase doit être une chaîne non vide (max 200 caractères)
400invalid_json_formatLe corps de la requête ou les champs sont mal formés
405method_not_allowedSeul POST est accepté sur /api/generate
413payload_too_largeCorps de la requête trop volumineux (limite 10 Ko)
429rate_limit_exceededLimite de débit dépassée — réessayez après l'en-tête Retry-After
500generation_failedErreur interne lors de la génération clé/CSR

Bonnes pratiques

  • Générez les clés privées localement avec OpenSSL ou node-forge pour les charges de production. L'API est conçue pour le développement, les tests et l'automatisation légère.
  • Définissez une passphrase lorsque la clé doit être stockée ou transférée entre systèmes.
  • Utilisez RSA 2048 ou ECDSA P-256 sauf si les exigences de conformité imposent des clés plus fortes.
  • Respectez l'en-tête Retry-After au lieu de marteler l'API après un 429.
  • Validez le paramètre domain côté client (max 253 caractères, alphanumériques, points et tirets) avant d'appeler les points de terminaison en lecture seule.
  • Ne journalisez jamais le champ private_key des réponses API.

Plus d'exemples

Python (requests)
import requests

r = requests.post(
    "https://csr.plus/api/generate",
    json={"common_name": "example.com", "sans": ["www.example.com"]},
)
r.raise_for_status()
data = r.json()

open("example.com.csr", "w").write(data["csr"])
open("example.com.key", "w").write(data["private_key"])
Node.js (fetch)
const res = await fetch("https://csr.plus/api/generate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ common_name: "example.com", key_type: "ecdsa", key_size: "P-256" }),
});
const { csr, private_key } = await res.json();
console.log(csr);

Essayez l'API en direct

Choisissez un endpoint, remplissez les paramètres et envoyez une vraie requête à l'API de production.

FAQ

Quelle est la limite de débit de l'API ?

La génération CSR permet 10 requêtes par minute par adresse IP. SSL check, CT et CAA permettent 30 par minute ; révocation et traceur TLS 20 par minute. Dépasser une limite renvoie HTTP 429 avec un en-tête Retry-After.

Quels types de clés sont pris en charge ?

RSA 2048/3072/4096 et ECDSA P-256/P-384. Passez les paramètres key_type et key_size dans le corps de la requête.

Puis-je chiffrer la clé privée générée ?

Oui. Ajoutez un champ passphrase à la requête et la clé privée est renvoyée chiffrée en clé PEM PKCS#8 chiffrée.

L'API stocke-t-elle ma clé privée ?

Non. Les clés et les CSR sont générés en mémoire et ne sont jamais persistés, journalisés ni stockés sur disque. Utilisez l'API pour le développement et les tests.

Quelles CA acceptent les CSR générés par cette API ?

L'API produit des CSR PKCS#10 standard avec signatures SHA-256 acceptés par toutes les grandes autorités de certification, dont Let’s Encrypt, DigiCert, Sectigo et Google Trust Services.