SIP Error 428 Use Identity Header: внедрение STIR/SHAKEN и заголовок Identity
- Исходящие вызовы на мобильные и городские сети операторов связи завершаются с кодом
SIP/2.0 428 Use Identity Header. - В логах зафиксировано требование наличия криптографического токена подтверждения номера звонящего (Anti-Spoofing / Caller ID Verification).
- Вызовы блокируются на пограничном шлюзе оператора без проключения голосового тракта.
1. Архитектура STIR/SHAKEN и причины ошибки 428
В соответствии со стандартами RFC 8224 и RFC 8588 (STIR/SHAKEN), операторы связи обязаны пресекать спуфинг (подмену) телефонных номеров. Ошибка 428 означает, что принимающий софтсвитч требует наличия заголовка Identity, содержащего подписанный JSON Web Token (JWT / PASSporT):
# Ожидаемый сервером заголовок:
Identity: eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6IlBBU1Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jZXJ0cy5hdXRoLm5ldC9jZXJ0LnBlbSJ9...;info=<https://certs.auth.net/cert.pem>;alg=ES256;ppt=shaken2. Настройка генерации STIR/SHAKEN в Asterisk 18/20
В /etc/asterisk/stir_shaken.conf настройте сертификат и параметры аттестации номера:
[general]
ca_path=/etc/asterisk/keys/ca.crt
[my-attestation-cert]
type=certificate
path=/etc/asterisk/keys/shaken_cert.pem
public_key_path=/etc/asterisk/keys/shaken_pub.pem
private_key_path=/etc/asterisk/keys/shaken_priv.pem
attestation=A ; Уровень доверия: A (Full), B (Partial), C (Gateway)
x5u=https://repo.company.com/cert.pem
[+12025550199]
type=caller_id
certificate=my-attestation-certВ pjsip.conf включите генерацию identity на исходящем транке:
[my-outbound-trunk]
type=endpoint
stir_shaken=yes
stir_shaken_profile=my-attestation-cert3. Подпись вызовов в Kamailio с использованием модуля SECFILTER / AS
loadmodule "secsipid.so"
modparam("secsipid", "private_key", "/etc/kamailio/keys/shaken.key")
modparam("secsipid", "x5u", "https://certs.carrier.com/cert.pem")
modparam("secsipid", "attest", "A")
route[STIR_SIGN] {
secsipid_sign("$fU", "$rU");
} Частые вопросы (FAQ)
Что означают уровни аттестации (Attestation Levels) A, B и C в STIR/SHAKEN?
'A' (Full) — оператор знает клиента и подтверждает его право на конкретный Caller ID. 'B' (Partial) — оператор знает клиента, но не может подтвердить право владения номером. 'C' (Gateway) — звонок получен из недоверенного международного шлюза.
Может ли конечная АТС самостоятельно генерировать заголовок Identity?
Да, если владелец АТС зарегистрирован в национальном центре сертификации (STI-PA / STI-CA) и обладает легитимным сертификатом шифрования с алгоритмом ECDSA P-256.
Что делать, если у компании нет сертификата STIR/SHAKEN?
Необходимо передавать исходящий вызов вышестоящему провайдеру с корректным заголовком P-Asserted-Identity, чтобы провайдер выполнил криптографическую подпись на своем пограничном SBC.
Какой криптографический алгоритм используется для подписи PASSporT токена?
Стандартом жестко закреплен алгоритм ES256 (ECDSA с использованием эллиптической кривой P-256 и хеш-функции SHA-256).