CSR.pluscsr.plus

Справочник API CSR.plus

Автоматизируйте весь жизненный цикл SSL/TLS-сертификатов с помощью одного открытого REST API — генерация CSR, декодирование, оценка A–F, прозрачность сертификатов, CAA, отзыв и трассировка TLS. Бесплатно, без аутентификации, без API-ключей.

Попробуйте API вживую

Обзор

API CSR.plus — это набор эндпоинтов только для чтения и генерации, которые питают наши веб-инструменты. Каждый эндпоинт возвращает JSON, поддерживает CORS для браузеров и имеет лимит по IP-адресу. Ключи и CSR генерируются в памяти и никогда не сохраняются.

Всё, что нужно: сгенерировать CSR и закрытый ключ, декодировать любой CSR, оценить развёртывание от A до F, искать в журналах прозрачности, проверять записи CAA, проверять статус отзыва и трассировать полное TLS-рукопожатие.

Базовый URL и аутентификация

Base URL
https://csr.plus

Все эндпоинты обслуживаются по HTTPS. Аутентификация не требуется — API открыт и не аутентифицирован по замыслу. Нет API-ключей, токенов или оплаты. Запросы идентифицируются по IP-адресу только для ограничения частоты.

Все ответы содержат CORS-заголовки (Access-Control-Allow-Origin: *), поэтому вы можете вызывать API напрямую из браузеров и клиентских скриптов.

Лимиты

ЭндпоинтЛимитОкно
/api/generate10 запросовв минуту на IP
/api/ssl-check, /api/ct, /api/caa30 запросовв минуту на IP
/api/revocation, /api/ssl-tracer20 запросовв минуту на IP
/api/decode, /api/openssl-traceБез ограничений—

Превышение лимита возвращает HTTP 429 с заголовком Retry-After, указывающим, сколько секунд ждать.

POST/api/generate

Генерирует запрос на подпись сертификата и закрытый ключ. Лимит: 10 запросов в минуту на IP.

Тело запроса

ПараметрТипОбязательноОписание
common_namestringДаОсновной домен (например, example.com)
sansarrayНетДополнительные альтернативные имена, например ["www.example.com"]
organizationstringНетНазвание организации (O)
org_unitstringНетОрганизационное подразделение (OU)
countrystringНетДвухбуквенный код страны (C), например "US"
statestringНетРегион или область (ST)
localitystringНетГород / населённый пункт (L)
emailstringНетКонтактный email
key_typestringНет"rsa" (по умолчанию) или "ecdsa"
key_sizestring|intНетRSA: 2048 (по умолч.) / 3072 / 4096 · ECDSA: "P-256" (по умолч.) / "P-384"
passphrasestringНетШифрует закрытый ключ как зашифрованный PKCS#8 PEM (макс. 200 символов)

Поля ответа

ПолеОписание
csrЗапрос на подпись сертификата в формате PEM (PKCS#10, подпись SHA-256)
private_keyЗакрытый ключ в формате PEM (PKCS#8; зашифрованный PKCS#8 при указании passphrase)
algorithmИспользуемый алгоритм, например "RSA-2048" или "ECDSA-P-256"
created_atМетка времени ISO 8601 генерации
Пример запроса (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
  }'
Пример ответа
{
  "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"
}
Проверить результат с помощью OpenSSL
openssl req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20
POST/api/decode

Разбирает любой CSR PKCS#10 и возвращает субъект, альтернативные имена, открытый ключ, проверку подписи и расширения.

Тело запроса

ПараметрТипОбязательноОписание
csrstringДаCSR в формате PEM (-----BEGIN CERTIFICATE REQUEST-----)
Пример запроса (cURL)
curl -X POST https://csr.plus/api/decode \
  -H "Content-Type: application/json" \
  -d '{"csr": "-----BEGIN CERTIFICATE REQUEST-----\n..."}'
Пример ответа
{
  "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"
}

Примечание: dcvInfo содержит подсказки по проверке контроля домена (HTTP-токен-файлы и запись CNAME), полезные при завершении этапов валидации CA.

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

Полная проверка SSL/TLS с оценкой A–F в стиле SSL Labs: срок действия сертификата, соответствие имени хоста, доверие цепочки, проверка версий TLS и анализ HSTS.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаПроверяемый хост (предполагается порт 443)
Пример запроса
curl "https://csr.plus/api/ssl-check?domain=example.com"
Пример ответа
{
  "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}

Ищет в публичных журналах прозрачности сертификатов все сертификаты, когда-либо выданные для домена. Если crt.sh недоступен, используется Cert Spotter.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаДомен для поиска в журналах CT
Пример запроса
curl "https://csr.plus/api/ct?domain=example.com"
Пример ответа
{
  "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"
    }
  ]
}

Ответ включает source (crt.sh или certspotter), чтобы вы знали, какой провайдер предоставил данные.

GET/api/caa?domain={domain}

Возвращает записи DNS CAA домена вместе с записями A, AAAA, NS и MX, показывая, каким центрам сертификации разрешено выпускать сертификаты.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаЗапрашиваемый домен
Пример запроса
curl "https://csr.plus/api/caa?domain=example.com"
Пример ответа
{
  "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}

Получает сертификат, который в данный момент обслуживает домен, и сообщает его точки распространения CRL и эндпоинты OCSP-ответчика.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаДомен, обслуживаемый сертификат которого проверяется
Пример запроса
curl "https://csr.plus/api/revocation?domain=example.com"
Пример ответа
{
  "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}

Выполняет реальное TLS-рукопожатие с любым хостом и портом, фиксируя разрешение DNS, TCP-подключение, согласованные версию и шифр TLS, а также полную цепочку сертификатов.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаХост для подключения
portintНетTCP-порт (по умолчанию 443)
Пример запроса
curl "https://csr.plus/api/ssl-tracer?domain=example.com&port=443"
Пример ответа
{
  "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}

Выполняет рукопожатие openssl s_client против домена и возвращает полный подробный вывод — полезно для отладки проблем с цепочкой и протоколом.

Параметры запроса

ПараметрТипОбязательноОписание
domainstringДаДомен для трассировки (предполагается порт 443)
Пример запроса
curl "https://csr.plus/api/openssl-trace?domain=example.com"
Пример ответа
{
  "success": true,
  "output": "CONNECTED(00000005)\ndepth=2 C=US, O=Internet Security Research Group...\nverify return:1\n..."
}

Коды ошибок

Ошибки возвращаются в виде JSON с сообщением error и, где применимо, errorId для программной обработки.

СтатусerrorIdЗначение
400invalid_jsonТело запроса не является корректным JSON
400invalid_common_namecommon_name отсутствует или длиннее 253 символов
400invalid_key_typekey_type должен быть "rsa" или "ecdsa"
400invalid_key_sizeРазмеры RSA должны быть 2048/3072/4096; кривые ECDSA — "P-256"/"P-384"
400invalid_passphrasepassphrase должна быть непустой строкой (макс. 200 символов)
400invalid_json_formatТело запроса или поля имеют неверный формат
405method_not_allowedНа /api/generate принимается только POST
413payload_too_largeТело запроса слишком большое (лимит 10 КБ)
429rate_limit_exceededПревышен лимит — повторите после заголовка Retry-After
500generation_failedВнутренняя ошибка при генерации ключа/CSR

Рекомендации

  • Для производственных нагрузок генерируйте закрытые ключи локально с помощью OpenSSL или node-forge. API предназначен для разработки, тестирования и лёгкой автоматизации.
  • Устанавливайте passphrase, если ключ нужно хранить или передавать между системами.
  • Используйте RSA 2048 или ECDSA P-256, если требования соответствия не требуют более сильных ключей.
  • Соблюдайте заголовок Retry-After вместо того, чтобы «долбить» API после 429.
  • Проверяйте параметр domain на стороне клиента (макс. 253 символа, буквенно-цифровые, точки и дефисы) перед вызовом эндпоинтов только для чтения.
  • Никогда не записывайте в журнал поле private_key из ответов API.

Другие примеры

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

Попробуйте API вживую

Выберите эндпоинт, заполните параметры и отправьте реальный запрос к рабочему API.

FAQ

Какой лимит у API?

Генерация CSR позволяет 10 запросов в минуту на IP-адрес. SSL-проверка, CT и CAA — 30 в минуту; отзыв и трассировщик TLS — 20 в минуту. Превышение возвращает HTTP 429 с заголовком Retry-After.

Какие типы ключей поддерживаются?

RSA 2048/3072/4096 и ECDSA P-256/P-384. Передайте параметры key_type и key_size в теле запроса.

Можно ли зашифровать сгенерированный закрытый ключ?

Да. Добавьте поле passphrase в запрос, и закрытый ключ будет возвращён зашифрованным как зашифрованный PEM-ключ PKCS#8.

Хранит ли API мой закрытый ключ?

Нет. Ключи и CSR генерируются в памяти и никогда не сохраняются, не логируются и не записываются на диск. Используйте API для разработки и тестирования.

Какие CA принимают CSR, сгенерированные этим API?

API создаёт стандартные CSR PKCS#10 с подписями SHA-256, принимаемые всеми крупными центрами сертификации, включая Let’s Encrypt, DigiCert, Sectigo и Google Trust Services.