CSR.pluscsr.plus

Riferimento API CSR.plus

Automatizza l'intero ciclo di vita dei certificati SSL/TLS con una singola API REST aperta: generazione CSR, decodifica, voto A–F, trasparenza dei certificati, CAA, revoca e tracciamento TLS. Gratuito, senza autenticazione, senza chiavi API.

Prova l'API dal vivo

Panoramica

L'API CSR.plus è una raccolta di endpoint di sola lettura e di generazione che alimentano i nostri strumenti web. Ogni endpoint restituisce JSON, supporta CORS per i browser ed è limitato per indirizzo IP. Chiavi e CSR vengono generati in memoria e mai memorizzati.

Tutto ciò che serve: generare CSR e chiave privata, decodificare qualsiasi CSR, valutare un deployment da A a F, cercare nei log di trasparenza, controllare i record CAA, verificare lo stato di revoca e tracciare un handshake TLS completo.

URL di base e autenticazione

Base URL
https://csr.plus

Tutti gli endpoint sono serviti su HTTPS. Nessuna autenticazione richiesta: l'API è aperta e senza autenticazione per progettazione. Niente chiavi API, token o fatturazione. Le richieste sono identificate per indirizzo IP solo per il limite di frequenza.

Tutte le risposte includono header CORS (Access-Control-Allow-Origin: *), quindi puoi chiamare l'API direttamente dai browser e dagli script lato client.

Limiti di frequenza

EndpointLimiteFinestra
/api/generate10 richiesteal minuto per IP
/api/ssl-check, /api/ct, /api/caa30 richiesteal minuto per IP
/api/revocation, /api/ssl-tracer20 richiesteal minuto per IP
/api/decode, /api/openssl-traceNon limitato—

Il superamento di un limite restituisce HTTP 429 con un header Retry-After che indica quanti secondi attendere.

POST/api/generate

Genera una richiesta di firma del certificato e una chiave privata. Limite: 10 richieste al minuto per IP.

Corpo della richiesta

ParametroTipoObbligatorioDescrizione
common_namestringSìDominio principale (es. example.com)
sansarrayNoNomi alternativi aggiuntivi, es. ["www.example.com"]
organizationstringNoNome dell'organizzazione (O)
org_unitstringNoUnità organizzativa (OU)
countrystringNoCodice paese a due lettere (C), es. "US"
statestringNoStato o provincia (ST)
localitystringNoLocalità / città (L)
emailstringNoIndirizzo email di contatto
key_typestringNo"rsa" (predefinito) o "ecdsa"
key_sizestring|intNoRSA: 2048 (predef.) / 3072 / 4096 · ECDSA: "P-256" (predef.) / "P-384"
passphrasestringNoCifra la chiave privata come PEM PKCS#8 cifrato (max 200 caratteri)

Campi della risposta

CampoDescrizione
csrRichiesta di firma del certificato in formato PEM (PKCS#10, firma SHA-256)
private_keyChiave privata in formato PEM (PKCS#8; PKCS#8 cifrato se fornita la passphrase)
algorithmAlgoritmo utilizzato, es. "RSA-2048" o "ECDSA-P-256"
created_atTimestamp ISO 8601 della generazione
Esempio di richiesta (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
  }'
Esempio di risposta
{
  "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"
}
Verificare il risultato con OpenSSL
openssl req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20
POST/api/decode

Analizza qualsiasi CSR PKCS#10 e restituisce soggetto, nomi alternativi, chiave pubblica, verifica della firma ed estensioni.

Corpo della richiesta

ParametroTipoObbligatorioDescrizione
csrstringSìLa CSR in formato PEM (-----BEGIN CERTIFICATE REQUEST-----)
Esempio di richiesta (cURL)
curl -X POST https://csr.plus/api/decode \
  -H "Content-Type: application/json" \
  -d '{"csr": "-----BEGIN CERTIFICATE REQUEST-----\n..."}'
Esempio di risposta
{
  "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"
}

Nota: dcvInfo contiene suggerimenti di validazione del controllo del dominio (file token HTTP e un record CNAME) utili per completare i passaggi di validazione della CA.

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

Controllo SSL/TLS completo con voto A–F stile SSL Labs: validità del certificato, corrispondenza hostname, fiducia della catena, sonde delle versioni TLS e ispezione HSTS.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìHostname da controllare (porta 443 presunta)
Esempio di richiesta
curl "https://csr.plus/api/ssl-check?domain=example.com"
Esempio di risposta
{
  "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}

Cerca nei log pubblici di trasparenza dei certificati tutti i certificati emessi per un dominio. Ricade su Cert Spotter se crt.sh non è disponibile.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìDominio da cercare nei log CT
Esempio di richiesta
curl "https://csr.plus/api/ct?domain=example.com"
Esempio di risposta
{
  "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 risposta include source (crt.sh o certspotter) per sapere quale provider ha servito i dati.

GET/api/caa?domain={domain}

Restituisce i record DNS CAA di un dominio insieme ai record A, AAAA, NS e MX, mostrando quali autorità di certificazione sono autorizzate a emettere certificati.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìDominio da interrogare
Esempio di richiesta
curl "https://csr.plus/api/caa?domain=example.com"
Esempio di risposta
{
  "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}

Recupera il certificato attualmente servito da un dominio e riporta i suoi punti di distribuzione CRL e gli endpoint del responder OCSP.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìDominio di cui viene ispezionato il certificato servito
Esempio di richiesta
curl "https://csr.plus/api/revocation?domain=example.com"
Esempio di risposta
{
  "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}

Esegue un handshake TLS reale contro qualsiasi host e porta, registrando risoluzione DNS, connettività TCP, versione e cipher TLS negoziati e l'intera catena di certificati.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìHostname a cui connettersi
portintNoPorta TCP (predefinita 443)
Esempio di richiesta
curl "https://csr.plus/api/ssl-tracer?domain=example.com&port=443"
Esempio di risposta
{
  "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}

Esegue un handshake openssl s_client grezzo contro un dominio e restituisce l'output verboso completo: utile per il debug di problemi di catena e protocollo.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringSìDominio da tracciare (porta 443 presunta)
Esempio di richiesta
curl "https://csr.plus/api/openssl-trace?domain=example.com"
Esempio di risposta
{
  "success": true,
  "output": "CONNECTED(00000005)\ndepth=2 C=US, O=Internet Security Research Group...\nverify return:1\n..."
}

Codici di errore

Gli errori vengono restituiti come JSON con un messaggio error e, dove applicabile, un errorId per la gestione programmatica.

StatoerrorIdSignificato
400invalid_jsonIl corpo della richiesta non è JSON valido
400invalid_common_namecommon_name manca o supera i 253 caratteri
400invalid_key_typekey_type deve essere "rsa" o "ecdsa"
400invalid_key_sizeLe dimensioni RSA devono essere 2048/3072/4096; le curve ECDSA "P-256"/"P-384"
400invalid_passphrasepassphrase deve essere una stringa non vuota (max 200 caratteri)
400invalid_json_formatCorpo della richiesta o campi malformati
405method_not_allowedSolo POST è accettato su /api/generate
413payload_too_largeCorpo della richiesta troppo grande (limite 10 KB)
429rate_limit_exceededLimite di frequenza superato: riprova dopo l'header Retry-After
500generation_failedErrore interno durante la generazione di chiave/CSR

Buone pratiche

  • Genera le chiavi private localmente con OpenSSL o node-forge per i carichi di produzione. L'API è progettata per sviluppo, test e automazione leggera.
  • Imposta una passphrase quando la chiave deve essere memorizzata o trasferita tra sistemi.
  • Usa RSA 2048 o ECDSA P-256 a meno che le regole di conformità non richiedano chiavi più forti.
  • Rispetta l'header Retry-After invece di sovraccaricare l'API dopo un 429.
  • Valida il parametro domain lato client (max 253 caratteri, alfanumerici, punti e trattini) prima di chiamare endpoint di sola lettura.
  • Non registrare mai il campo private_key dalle risposte dell'API.

Altri esempi

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);

Prova l'API dal vivo

Scegli un endpoint, compila i parametri e invia una richiesta reale all'API di produzione.

FAQ

Qual è il limite di frequenza dell'API?

La generazione CSR consente 10 richieste al minuto per indirizzo IP. SSL check, CT e CAA consentono 30 al minuto; revoca e tracer TLS 20 al minuto. Il superamento restituisce HTTP 429 con un header Retry-After.

Quali tipi di chiave sono supportati?

RSA 2048/3072/4096 ed ECDSA P-256/P-384. Passa i parametri key_type e key_size nel corpo della richiesta.

Posso cifrare la chiave privata generata?

Sì. Aggiungi un campo passphrase alla richiesta e la chiave privata viene restituita cifrata come chiave PEM PKCS#8 cifrata.

L'API memorizza la mia chiave privata?

No. Chiavi e CSR vengono generati in memoria e mai persistiti, registrati o salvati su disco. Usa l'API per sviluppo e test.

Quali CA accettano i CSR generati da questa API?

L'API produce CSR PKCS#10 standard con firme SHA-256 accettati da tutte le principali autorità di certificazione, incluse Let’s Encrypt, DigiCert, Sectigo e Google Trust Services.