代表性面试主题

后端面试:如何设计 STIR/SHAKEN 的带外 CPS 服务?

后端困难
Offer.cc 编辑团队发布 更新

题干

多个电话服务提供商无法保证 SIP 信令携带 PASSporT。请基于 RFC 9888 设计带外 Call Placement Service(CPS),说明服务发现、提交与检索、mTLS 授权、过期控制、网关互通和隐私风险。

题干与适用场景

多个电话服务提供商无法保证 SIP 信令携带 PASSporT。请基于 RFC 9888 设计带外 Call Placement Service(CPS),说明服务发现、提交与检索、mTLS 授权、过期控制、网关互通和隐私风险。

RFC 9888 针对大型服务提供商在 SIP 不能可靠端到端传递时,通过 HTTP 让 OOB Authentication Service(OOB-AS)向 CPS 提交 PASSporT,再由 OOB Verification Service(OOB-VS)拉取或接收推送。题目重点是信任边界和生命周期,不是实现一个普通 REST 存储桶。

面试官考察点

面试官会看你能否区分 STIR 凭证、PASSporT、CPS、OOB-AS 与 OOB-VS 的职责;能否设计可信的 CPS 广告和电话号范围授权;能否用 mTLS、租户限额与短过期时间防止伪造、重放和洪泛;以及能否解释多供应商检索、网关转换、隐私收集和故障降级。

回答前需要澄清的问题

参与者与网络边界

先确认谁签发 PASSporT、谁运营目标服务提供商的 CPS、OOB-VS 是拉取还是订阅推送,以及哪些链路经过 PSTN 网关或传统网络。

真实性与隐私目标

确认系统要证明主叫身份、减少号码冒用,还是还要隐藏呼叫双方元数据。RFC 9888 的服务提供商 CPS 本来就属于通话参与方,隐私模型与开放互联网 OOB 服务不同。

时延和保存期限

确认来电提示最多能等待多久、允许多少时钟偏差,以及 PASSporT 是否只需保存到验证完成。不能把 CPS 当成长期归档库。

30 秒回答框架

“我会按目标服务商的 SPC 或号码范围发布签名的 CPS 广告,OOB-AS 用受信任的 STIR 凭证和 mTLS 向 CPS 提交 PASSporT,CPS 按目标号码授权、限流并只保存到 PASSporT 新鲜度窗口内。OOB-VS 可以在收到呼叫后拉取,也可以按号码范围订阅推送;多供应商场景必须校验 dest 与 TNAuthList 的授权关系。网关只做协议转换,不扩大权限。全链路记录过期、重复、未授权和延迟指标,并把 CPS 的元数据收集写入治理边界。”

分步骤深入解答

第一步:划分信任与数据流

OOB-AS 生成或携带 PASSporT,向目标 CPS 提交;CPS 根据广告和本地策略接收;OOB-VS 只取得自己有权验证的目标号码范围。验证服务仍需检查 PASSporT 的签名、orig、dest 和新鲜度,不能因为来源是 CPS 就跳过验证。

第二步:安全发布 CPS 广告

广告把 SPC 或电话号范围映射到 HTTPS CPS URI。广告应由受信任的 STIR 证书签名,接收方比对签名者的 TNAuthList 与被宣传范围,防止任意持证方劫持一个号码范围。发现可通过配置、数据库或安全 DNS 流程完成,但缓存必须带版本和失效策略。

第三步:提交接口与授权

OOB-AS 与 CPS 建立 TLS,优先使用 mTLS,并检查证书是否属于允许提交的服务提供商。CPS 按服务商、号码范围和速率做配额,拒绝未知凭证、错误目标或过量请求。提交接口应返回可观测的接受、拒绝和重复状态,但不返回可帮助攻击者试错的内部策略。

第四步:保存与过期

PASSporT 只保存到检索所需时间,且不超过其 freshness interval;RFC 9888 描述的上限是 60 秒。以 orig、dest、呼叫标识和 PASSporT 唯一信息建立去重键,避免同一对象被无限重放。过期清理应是强制约束,而不是依赖低频后台任务。

第五步:拉取与推送检索

拉取模型在收到没有内嵌 PASSporT 的呼叫后查询 CPS;推送模型按号码范围或 SPC 订阅,将对象主动送给获授权的 OOB-VS。多供应商 CPS 必须检查 PASSporT 的 dest,确保只把对象交给对应服务商。推送失败不能改变签名有效期,验证方应明确“暂时无凭证”和“凭证无效”。

第六步:网关和降级

网关可以从 SIP INVITE 提取 PASSporT 并提交给面向传统 PSTN 的 CPS,也可以把 OOB 对象转换为下游可理解的形式。网关凭证应被授予明确的代理范围,不能把一个服务商的权限扩展到整个网络。CPS 不可用时继续接通并标记未验证,还是阻断高风险呼叫,应由产品和监管策略决定。

第七步:隐私、监控和演练

CPS 会接触电话元数据,需限制字段、保留时间和访问审计。指标至少包括提交成功率、未授权率、重复率、过期率、拉取延迟、推送积压和按服务商的配额拒绝。测试应覆盖证书吊销、号码范围重叠、重放、跨供应商读取、广告被改写、PSTN 网关断链和 CPS 局部故障。

高质量示范回答

我会先登记参与方和授权范围:每个目标服务商发布由其 STIR 凭证签名的 CPS 广告,广告把 SPC 或号码范围绑定到 HTTPS URI。OOB-AS 用 mTLS 向目标 CPS 提交 PASSporT,CPS 校验证书、dest、范围和限额,并只保存到新鲜度窗口结束;RFC 9888 描述的最长保存时间是 60 秒。OOB-VS 可以在无内嵌 PASSporT 的来电到达后拉取,也可以按号码范围订阅推送。多供应商 CPS 必须根据 dest 和 TNAuthList 做读取授权。PSTN 网关只能使用委派范围执行提取或转换。系统应区分凭证缺失、凭证过期和签名无效,按策略降级,同时审计元数据访问并监控洪泛、重放、延迟和配额拒绝。

常见错误

  • 错误表现: 把 CPS 当成公开对象存储。→ 失败原因: 未授权的提交和读取会造成伪造、数据泄露与洪泛。→ 修正方法: 用受信任凭证、mTLS、号码范围授权和服务商配额限制访问。
  • 错误表现: 把 PASSporT 长期保存以便追查。→ 失败原因: 超过新鲜度窗口会扩大重放和元数据暴露。→ 修正方法: 以验证完成为目标设置短 TTL,并强制过期删除。
  • 错误表现: 只按 orig 决定谁能读取。→ 失败原因: 多供应商必须同时约束 dest 与服务商拥有的 TNAuthList。→ 修正方法: 在提交和检索两侧都做目标范围授权。
  • 错误表现: 网关提取对象后直接信任。→ 失败原因: 网关改变了传输位置,没有替代签名验证。→ 修正方法: 保留 PASSporT 验证流程,并给网关最小委派权限。

追问及应对

如果 OOB-AS 的 mTLS 证书泄露怎么办?

立即吊销证书、停止其提交权限并按服务商范围隔离;对已提交对象仍按 PASSporT 新鲜度和签名验证处理,不能仅依赖连接身份。

为什么需要签名 CPS 广告?

广告决定 PASSporT 应提交到哪个 CPS。签名把 CPS URI 与 SPC 或号码范围绑定,避免攻击者把合法服务商的流量导向自己的收集点。

拉取和推送如何选择?

拉取实现简单并按实际来电触发;推送可降低验证等待,但需要订阅授权、积压处理和撤销订阅。大规模部署可按服务商和号码范围混合使用。

CPS 暂时不可用,呼叫要不要阻断?

先区分防骚扰提示与强监管阻断。对普通来电可以继续接通并标记未验证;对高风险场景可延迟或阻断,但必须把策略、超时和误伤指标纳入产品决策。

公开来源

同类题目