Справочник API CSR.plus
Автоматизируйте весь жизненный цикл SSL/TLS-сертификатов с помощью одного открытого REST API — генерация CSR, декодирование, оценка A–F, прозрачность сертификатов, CAA, отзыв и трассировка TLS. Бесплатно, без аутентификации, без API-ключей.
Попробуйте API вживуюОбзор
API CSR.plus — это набор эндпоинтов только для чтения и генерации, которые питают наши веб-инструменты. Каждый эндпоинт возвращает JSON, поддерживает CORS для браузеров и имеет лимит по IP-адресу. Ключи и CSR генерируются в памяти и никогда не сохраняются.
Базовый URL и аутентификация
https://csr.plusВсе эндпоинты обслуживаются по HTTPS. Аутентификация не требуется — API открыт и не аутентифицирован по замыслу. Нет API-ключей, токенов или оплаты. Запросы идентифицируются по IP-адресу только для ограничения частоты.
Все ответы содержат CORS-заголовки (Access-Control-Allow-Origin: *), поэтому вы можете вызывать API напрямую из браузеров и клиентских скриптов.
Лимиты
| Эндпоинт | Лимит | Окно |
|---|---|---|
| /api/generate | 10 запросов | в минуту на IP |
| /api/ssl-check, /api/ct, /api/caa | 30 запросов | в минуту на IP |
| /api/revocation, /api/ssl-tracer | 20 запросов | в минуту на IP |
| /api/decode, /api/openssl-trace | Без ограничений | — |
Превышение лимита возвращает HTTP 429 с заголовком Retry-After, указывающим, сколько секунд ждать.
/api/generateГенерирует запрос на подпись сертификата и закрытый ключ. Лимит: 10 запросов в минуту на IP.
Тело запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| common_name | string | Да | Основной домен (например, example.com) |
| sans | array | Нет | Дополнительные альтернативные имена, например ["www.example.com"] |
| organization | string | Нет | Название организации (O) |
| org_unit | string | Нет | Организационное подразделение (OU) |
| country | string | Нет | Двухбуквенный код страны (C), например "US" |
| state | string | Нет | Регион или область (ST) |
| locality | string | Нет | Город / населённый пункт (L) |
| string | Нет | Контактный email | |
| key_type | string | Нет | "rsa" (по умолчанию) или "ecdsa" |
| key_size | string|int | Нет | RSA: 2048 (по умолч.) / 3072 / 4096 · ECDSA: "P-256" (по умолч.) / "P-384" |
| passphrase | string | Нет | Шифрует закрытый ключ как зашифрованный 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 -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 req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20/api/decodeРазбирает любой CSR PKCS#10 и возвращает субъект, альтернативные имена, открытый ключ, проверку подписи и расширения.
Тело запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| csr | string | Да | CSR в формате PEM (-----BEGIN CERTIFICATE REQUEST-----) |
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.
/api/ssl-check?domain={domain}Полная проверка SSL/TLS с оценкой A–F в стиле SSL Labs: срок действия сертификата, соответствие имени хоста, доверие цепочки, проверка версий TLS и анализ HSTS.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Проверяемый хост (предполагается порт 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 }
}/api/ct?domain={domain}Ищет в публичных журналах прозрачности сертификатов все сертификаты, когда-либо выданные для домена. Если crt.sh недоступен, используется Cert Spotter.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Домен для поиска в журналах 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), чтобы вы знали, какой провайдер предоставил данные.
/api/caa?domain={domain}Возвращает записи DNS CAA домена вместе с записями A, AAAA, NS и MX, показывая, каким центрам сертификации разрешено выпускать сертификаты.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Запрашиваемый домен |
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": ""
}/api/revocation?domain={domain}Получает сертификат, который в данный момент обслуживает домен, и сообщает его точки распространения CRL и эндпоинты OCSP-ответчика.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Домен, обслуживаемый сертификат которого проверяется |
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"
}/api/ssl-tracer?domain={domain}&port={port}Выполняет реальное TLS-рукопожатие с любым хостом и портом, фиксируя разрешение DNS, TCP-подключение, согласованные версию и шифр TLS, а также полную цепочку сертификатов.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Хост для подключения |
| port | int | Нет | 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": []
}/api/openssl-trace?domain={domain}Выполняет рукопожатие openssl s_client против домена и возвращает полный подробный вывод — полезно для отладки проблем с цепочкой и протоколом.
Параметры запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| domain | string | Да | Домен для трассировки (предполагается порт 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 | Значение |
|---|---|---|
| 400 | invalid_json | Тело запроса не является корректным JSON |
| 400 | invalid_common_name | common_name отсутствует или длиннее 253 символов |
| 400 | invalid_key_type | key_type должен быть "rsa" или "ecdsa" |
| 400 | invalid_key_size | Размеры RSA должны быть 2048/3072/4096; кривые ECDSA — "P-256"/"P-384" |
| 400 | invalid_passphrase | passphrase должна быть непустой строкой (макс. 200 символов) |
| 400 | invalid_json_format | Тело запроса или поля имеют неверный формат |
| 405 | method_not_allowed | На /api/generate принимается только POST |
| 413 | payload_too_large | Тело запроса слишком большое (лимит 10 КБ) |
| 429 | rate_limit_exceeded | Превышен лимит — повторите после заголовка Retry-After |
| 500 | generation_failed | Внутренняя ошибка при генерации ключа/CSR |
Рекомендации
- Для производственных нагрузок генерируйте закрытые ключи локально с помощью OpenSSL или node-forge. API предназначен для разработки, тестирования и лёгкой автоматизации.
- Устанавливайте passphrase, если ключ нужно хранить или передавать между системами.
- Используйте RSA 2048 или ECDSA P-256, если требования соответствия не требуют более сильных ключей.
- Соблюдайте заголовок Retry-After вместо того, чтобы «долбить» API после 429.
- Проверяйте параметр domain на стороне клиента (макс. 253 символа, буквенно-цифровые, точки и дефисы) перед вызовом эндпоинтов только для чтения.
- Никогда не записывайте в журнал поле private_key из ответов API.
Другие примеры
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"])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.