API предназначено для безопасного управления сертификатами на IP-телефонах через удаленный сервер управления.
https://{phone_ip}:{phone_port}/api/v1/certificates
REST API сервер принимает запросы по протоколу HTTPS на порту 8443. Для установки защищённого соединения используется предварительно загруженный SSL/TLS сертификат. |
GET https://{phone_ip}:{phone_port}/api/test
POST https://{phone_ip}:{phone_port}/api/test
Ответ от телефона:
JSON
{
"query": "GET", // Метод тестового запроса
"data": {
"date": "2021-08-06T18:07:50Z" // Дата формирования ответа (формат UTC)
}
}
GET https://{phone_ip}:{phone_port}/api/v1/certificates
Описание: возвращает список всех установленных сертификатов
Ответ от телефона:
JSON
{ "status": "200ок", // Статус выполнения операции "timestamp": "2026-01-24T13:30:00Z", // Дата формирования ответа (формат UTC) "data": { "certificates": [ // Массив сертификатов { "id": "", // Внутренний уникальный идентификатор (присваивается телефоном при загрузке сертификата) "type": "", // Тип сертификата: ca, client, server "subject": { // Информация о владельце "commonName": "", "organization": "", }, "issuer": { // Информация об организации выпустившей сертификат "commonName": "", "organization": "" }, "validity": { // Срок действия "notBefore": "2026-01-01T00:00:00Z", // Начало действия "notAfter": "2027-01-01T00:00:00Z", // Окончание действия "daysRemaining": X // Осталось дней }, "fingerprints": { // Хеш-суммы для идентификации "sha256": "1234567890ABCDEF...", // SHA-256 "sha1": "1234567890ABCDEF..." // SHA-1
"md5": "1234567890ABCDEF..." // MD5 }, "serialNumber": "1234567890ABCDEF...", // Уникальный серийный номер "version": 3 // Версия X.509 (v3 с поддержкой расширений) } ], "total": X, // Общее количество сертификатов } }
Коды состояний
200 OK — успешный запрос;
401 Unauthorized — ошибка аутентификации;
403 Forbidden — недостаточно прав.
GET https://{phone_ip}:{phone_port}/api/v1/certificates/{id}
Описание: возвращает детальную информацию о сертификате с запрошенным {id}
Ответ от телефона:
JSON
{ "status": "200ок", "timestamp": "2026-01-24T13:35:00Z", "data": { "certificate": { "id": "", "type": "", "subject": { // Расширенная информация о владельце "commonName": "", "organization": "", }, "issuer": { "commonName": "", "organization": "", }, "validity": { "notBefore": "2026-01-01T00:00:00Z", "notAfter": "2027-01-01T00:00:00Z", "daysRemaining": X, "isExpired": false, // Не просрочен "isValid": true // В настоящее время действителен? }, "fingerprints": { "sha256": "1234567890ABCDEF....", "sha1": "1234567890ABCDEF...", "md5": "1234567890ABCDEF..." }, "keyInfo": { // Информация о криптографическом ключе "algorithm": "RSA", "keySize": 4096, "publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." // Публичный ключ в base64 }, "serialNumber": "1234567890ABCDEF...", "version": 3, "installationDate": "2026-01-02T14:30:00Z", // Дата установки сертификата на телефон } } }
Коды состояний
200 OK — успешный запрос;
401 Unauthorized — ошибка аутентификации;
403 Forbidden — недостаточно прав;
PUT https://{phone_ip}:{phone_port}/api/v1/certificates
Описание: установка нового сертификата на телефон
Параметры
Ответ от телефона:
JSON
{ "status": "200ок", "timestamp": "2026-01-15T11:00:00Z", "data": { "id": "", // Уникальный идентификатор, присвоенный системой телефона "storageLocation": "/mnt/nand/sys_info/certificates/cert_{id}.pem" // Путь и имя файла на телефоне
}
Коды состояний
200 OK — успешный запрос;
400 Bad Request — некорректные данные или формат;
401 Unauthorized — ошибка аутентификации;
403 Forbidden — недостаточно прав;
415 Unsupported Media Type — неподдерживаемый формат файла.
DELETE https://{phone_ip}:{phone_port}/api/v1/certificates/{id}
Описание: удаление сертификата с идентификатором {id}
Ответ от телефона:
JSON
{ "status": "200ок", "timestamp": "2026-01-15T11:05:00Z", "data": { "id": "", "message": "" } }
Коды состояний
200 OK — успешный запрос;
403 Forbidden — недостаточно прав или попытка удалить защищенный (системный) сертификат;
DELETE https://{phone_ip}:{phone_port}/api/v1/certificates
Описание: удаление всех установленных сертификатов
Ответ от телефона:
JSON
{ "status": "200ок", "timestamp": "2026-01-15T11:05:00Z", "data": { "id": "", "message": "" } }
Коды состояний
200 OK — успешный запрос;
1. Тестовый запрос:
сurl -X POST -k -u admin:password https://192.168.88.105:8443/api/test
Ответ:
{
"query": "POST",
"data": {
"date": "2021-08-06T18:07:57Z"
}
}
2. Загрузка сертификата:
curl -X PUT -k -u admin:password https://192.168.88.105:8443/api/v1/certificates -F "certificate=@root.pem" -F "type=ca" -F "usage=root"
Ответ:
{
"status": "200 OK",
"timestamp": "2021-08-06T18:31:46Z",
"data": {
"id": "1",
"storageLocation": "/etc/certificates/cafile.pem"
}
}
3. Запрос информации о сертификате:
curl -X GET -k -u admin:password https://192.168.88.105:8443/api/v1/certificates/1
Ответ:
{
"status": "200 OK",
"timestamp": "2021-08-06T18:59:08Z",
"data": {
"certificate": [
{
"id": 1,
"type": "cafile",
"subject": {
"commonName": "Eltex Root CA",
"organization": ""
},
"issuer": {
"commonName": "Eltex Root CA",
"organization": ""
},
"validity": {
"notBefore": "2026-04-06T08:43:25Z",
"notAfter": "2027-04-06T08:43:25Z",
"daysRemaining": 365,
"isExpired": false,
"isValid": false
},
"Fingerprints": {
"SHA1": "9ACEA24A2A4511871C2473C3395763F0B39C61EF",
"SHA256": "FC202F3A9100EECB887E92AA4A7971E30318FBA8F640634B98CACE130447E99C",
"MD5": "51273B6B5161A9A92EFC3C0D95699178"
},
"keyInfo": {
"algorithm": "rsaEncryption",
"keySize": 2048,
"publicKey": "MIIBIjANBgkqhkiG9w0B.......................r0H7AQIDAQAB"
},
"serialNumber": "18:FF:AA:1B:1E:57:0B:8A:DB:02:D9:87:B5:C1:A7:97:B8:AB:7A:90",
"version": 3,
"installationDate": "2021-08-06T18:31:46Z"
}
]
}
}
4. Удаление сертификата
curl -X DELETE -k -u admin:password https://192.168.88.105:8443/api/v1/certificates/1
Ответ:
{
"status": "200 OK",
"timestamp": "2021-08-06T19:10:17Z",
"data": {
"certificate": [
{
"id": 1,
"message": "Deleted"
}
]
}
}