Содержание
Описание проблемы
При создании звонка произошла ошибка 500: Conference creation failed: Internal server error
.
Ошибка говорит о том, что при попытке создать звонок (создать конференцию), бэкенд не смог авторизоваться в Медиа сервере.
Пример отображения ошибки:
Пример лог файла ucall_back.log
:
May 27 17:26:47 r7team ucall_back(i2)[1770]: (Use node --trace-warnings ... to show where the warning was created) May 27 17:26:47 r7team ucall_back(i2)[1770]: 2025-05-27 05:05:47: ERROR POST /api/v2/conference 172.16.16.11| {"type":"TypeError","message":"fetch failed: unable to verify the first certificate","stack":"TypeError: fetch failed\n at Object.fetch (node:internal/deps/undici/undici:11118:11)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async MindClient.createConference (/opt/team/back/src/infrastructure/mind/MindClientAsync.js:128:12)\n at async CallService.create (/opt/team/back/src/service/call/CallService.js:195:17)\n at async /opt/team/back/src/WebAPI/v2/Controllers/Conference/ConferenceController.js:36:20\ncaused by: Error: unable to verify the first certificate\n at TLSSocket.onConnectSecure (node:_tls_wrap:1538:34)\n at TLSSocket.emit (node:events:513:28)\n at TLSSocket._finishInit (node:_tls_wrap:952:8)\n at ssl.onhandshakedone (node:_tls_wrap:733:12)"} May 27 17:26:47 r7team ucall_back(i2)[1770]: 2025-05-27 05:05:47: INFO 500 POST /api/v2/conference request errored {"type":"Error","message":"failed with status code 500","stack":"Error: failed with status code 500\n at onResFinished (/opt/team/back/node_modules/pino-http/logger.js:114:39)\n at ServerResponse.onResponseComplete (/opt/team/back/node_modules/pino-http/logger.js:177:14)\n at ServerResponse.emit (node:events:525:35)\n at onFinish (node:_http_outgoing:950:10)\n at callback (node:internal/streams/writable:555:21)\n at afterWrite (node:internal/streams/writable:500:5)\n at afterWriteTick (node:internal/streams/writable:487:10)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)"}
Ошибка unable to verify the first certificate
.
Данная ошибка возникает в момент проверки цепочки. Она означает, что Node.js
получил сертификат сервера (the first certificate
в цепочке) и не смог успешно проследить его до действительного и доверенного корневого сертификата.
Ошибка 500.
Невозможность установить защищенное соединение с внутренним сервисом, из-за ошибки верификации сертификата, является критической внутренней ошибкой для бэкенда, что, в свою очередь, приводит к возврату HTTP статуса 500 (Internal Server Error
) на внешний запрос создания конференции.
Решение
1. Авторизуйтесь с повышением привилегий (su -
или sudo -i
) на сервере управления Р7 Команды.
2. Выполните проверку файла /opt/team/cacerts/trusted.pem
:
cat /opt/team/cacerts/trusted.pem
3. Файл должен включать в себя всю цепочку сертификатов.
Сертификат для CN=volav.ru (ваш конечный сертификат).
Сертификат для CN=R10, O=Let’s Encrypt (промежуточный сертификат).
Сертификат для CN=ISRG Root X1, O=Internet Security Research Group (корневой сертификат).
Пример вывода:
-----BEGIN CERTIFICATE----- MIIE9zCCA9+gAwIBAgISBnyA7N0Nw6cjJWYnJLCfjU9NMA0GCSqGSIb3DQEBCwUA MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD EwNSMTAwHhcNMjUwNTI3MTE1MzI1WhcNMjUwODI1MTE1MzI0WjATMREwDwYDVQQD Ewh2b2xhdi5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANGqQfyt deDTtsVOdHFdSkGbFU1YB0/MDpCui6rHALCitmwpgomwxTElO9Q5yDeltRjWhGdN /WzVqrhpZnBiR+doSOMfhfob2HFEmbh88Ut9csnUC9uRYoyGBJ4KRZggqu6//XMr oJWzAjnSk0qaBaz0MWyZAVgNO4IU/moava78zj1lHwzn8EQKGBgV7ZY9Unb1e9T/ GVZyfkoI0jCFoBkeEx15VkDTkRRwPj71MaCj3SFcspunT2CHL/SYLkY0JziujC1F 0AqM/o9w1bY5HJ2By84N/vzBpmtRp82YMdY22QZCmuBOSlbvsbLx1+CNS86rz4uS +lhit4AnixB1pasCAwEAAaOCAiMwggIfMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU n2AiU+Y1GEhWNirLeoylL16g/74wHwYDVR0jBBgwFoAUu7zDR6XkvKnGw6RyDBCN ojXhyOgwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdodHRwOi8vcjEwLmku bGVuY3Iub3JnLzAfBgNVHREEGDAWggoqLnZvbGF2LnJ1ggh2b2xhdi5ydTATBgNV HSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcjEwLmMu bGVuY3Iub3JnLzc4LmNybDCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2AN3cyjSV 1+EWBeeVMvrHn/g9HFDf2wA6FBJ2Ciysu8gqAAABlxHMrtkAAAQDAEcwRQIgY58W /rlmkimvcwZlwuL6ZhplmHJaiM1a9DzDRwUVlVcCIQD+sjp1vb90cNPlZFzpCT9u vxYwx6hOORIESS09LOotQwB1AA3h8jAr0w3BQGISCepVLvxHdHyx1+kw7w5CHrR+ Tqo0AAABlxHMtnIAAAQDAEYwRAIgDyIZvsBp/oOqWtaCCefX8ohDXsm5PBSHSdoA HXWpxRoCIE35s5m/PTxDapffr7mK3osgIx4gRwT1BMviv1A3q0AUMA0GCSqGSIb3 DQEBCwUAA4IBAQDIQ4gI6YpFPR20n+sUJdKyvvulN+deVnduQRFFSHh1fl4Y9YJB 4Db0guPs84lVLvnBgEKCNy2guZwC0MFED3i+uvNJ4hgWyiwyY0sBzO2xIUFthuZV heh+HtCOoDw+a23ZmVhFZuA1XriLiFnduZHCR4RoGqVPHaCoUMEc+WdQH8gMh+Tq 7ayoOkhsFoSEwipoo0leaeWiaG4WMKWkVfcIzyW1JXy6FE46F1L5sdcWGZvxUPJS AUralgdpivvNyb3NAFVn+8PZsNu3197AP36xJf1eZ+k4p0rcUQNMOEN/Nmg4c+5d tUMKEnU1bW5axgZ09kBcQDh/VtxICAfuw6G5 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy Y2hhR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a /6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4 FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3 DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/ AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5 tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9 1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0 GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh 1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N 4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQEBBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2hhR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE-----
4. Для корректной установки необходимых сертификатов воспользуйтесь функцией инсталлятора:
а. Подготовьте файл trusted.pem
, который включает в себя всю цепочку сертификатов по примеру из пункта 3.
б. Запустите инсталлятор, сервера управления команды и выберите сервисное меню:
в. Перейдите в меню исправления ошибок:
г. Выберите пункт меню импортировать корневой сертификат:
д. Добавьте путь до файла из пункта a:
е. Выберите хранилище ключей, обычно «по умолчанию»:
ё. Введите пароль от хранилища ключей:
ж. Выполните перезагрузку сервисов:
з. Если при выходе из инсталлятора видны проблемы запуска скриптов остановки и запуска сервисов, выполните перезагрузку ОС:
Диагностика корректности добавления сертификатов
1. Признак того, что сертификаты установились в контейнер это наличие записей Certificate was added to keystore
в выводе скрипта при выходе из инсталлятора:
2. Проверьте наличие созданного файла. Этот файл будет являться копией файла который вы создавали в пункте 4.a
cat /opt/team/cacerts/trusted.pem
3. Также можно убедиться в наличии сертификатов в контейнере если использовался контейнер по умолчанию (проверка сертификатов с префиксом r7team_
). Должно выводиться 3 записи, имена сертификатов обозначены в строке Alias name
:
sudo keytool -list -v -keystore "/etc/ssl/certs/adoptium/cacerts" -storepass changeit | grep -A 20 "^Alias name: r7team_"
Или:
sudo keytool -list -v -keystore "/usr/lib/jvm/temurin-8-jdk-amd64/jre/lib/security/cacerts" -storepass changeit | grep -A 20 "^Alias name: r7team_"
Найти реальный путь Java
можно так:
readlink -f $(which java)
Или:
update-alternatives --list java
Пример вывода:
/usr/lib/jvm/temurin-8-jdk-amd64/bin/java
Проверить файл cacerts
можно с помощью команды:
ls -l /usr/lib/jvm/temurin-8-jdk-amd64/jre/lib/security/cacerts
Команда выводит подробную информацию о файле cacerts
и символическую ссылку:
lrwxrwxrwx 1 root root 31 Nov 3 2022 /usr/lib/jvm/temurin-8-jdk-amd64/jre/lib/security/cacerts -> /etc/ssl/certs/adoptium/cacerts