**STIR/SHAKEN证书的申请,卡住最多开发者的不是技术难度,而是“不知道从哪里开始、证书长什么样、该用什么格式”。**
现实是:证书不由FCC直接签发,也不由SIP Trunking提供商“赠送”。获取一张可用于生产签名的STIR/SHAKEN证书,需要沿着一条**三方链条**完成:**STI-PA(政策管理机构)→ 获取SPC Token → FCC授权的STI-CA(证书颁发机构)** 。而到了部署阶段,证书和私钥的格式(PEM/X.509)、算法要求,以及SIP Trunking平台的兼容性,决定了这张证书能不能真正被“用起来”。
自2025年9月18日起,FCC进一步收紧了规则:**有STIR/SHAKEN实施义务的服务提供商必须使用自己获取的证书签名,不能依赖第三方供应商的证书**。这意味着“借用”或“转售”证书的路径已经被关闭,开发者必须走完从STI-PA到证书的完整流程。
销售一、证书从哪里来:STI-PA → SPC Token → STI-CA的三方链条
销售1.1 第一步:在STI-PA注册并获取SPC Token
STI-PA(Secure Telephone Identity Policy Administrator)目前由**iconectiv**运营。它是整个SHAKEN生态的“准入登记处”,负责验证你是否是一个有资格参与的服务提供商。
**前置条件:OCN(Operating Company Number)** 。STI-GA的政策明确:服务提供商**必须持有OCN**才能参与SHAKEN生态。OCN通常与FCC Form 499A申报关联,这是很多开发者容易忽略的第一道门槛。
**注册流程**:在STI-PA网站完成**服务提供商账户注册**,提交企业信息并缴纳年费。注册通过后,STI-PA会发放**SPC Token(Service Provider Code Token)**——这是后续向CA申请证书时证明你“有权申请”的授权凭证。
**开发者需要准备的材料**:企业法律名称、OCN、FCC Form 499申报信息、技术联系人信息。SPC Token本身是一个授权令牌,不是X.509证书。
销售1.2 第二步:用SPC Token向FCC授权的STI-CA申请证书
拿到SPC Token后,下一步是选择一家**FCC授权的STI-CA**来签发X.509证书。FCC授权列表包括**TransNexus、Sansay、Peeringhub、Martini Security、Neustar、NetNumber、Ribbon、Somos、GBSDTech**等。不同CA的交付方式不同:有的提供Web门户上传CSR,有的提供**ACME自动化接口**。
**核心机制**:CA在签发证书前,会通过ACME的`spc-token`挑战来验证你的SPC Token有效性。流程是:ACME客户端发起申请 → CA返回`spc-token`挑战 → 客户端将**SPC Token**作为challenge response提交 → CA向STI-PA验证Token签名 → 验证通过后签发证书。
这意味着,**SPC Token是连接STI-PA和STI-CA的关键授权凭证**,没有它,CA不会签发证书。
销售1.3 证书的最终形态:X.509 PEM,ECDSA with SHA-256
开发者最终拿到的是一张**X.509数字证书**,格式要求如下:
| 项目 | 要求 |
|---|---|
| 证书格式 | PEM格式(.pem、.cer或.crt均可,但PEM是生产签名的标准格式) |
| 私钥格式 | 未加密的PEM格式私钥,算法为EC-P256或RSA-2048 |
| 签名算法 | ECDSA with SHA-256(推荐且常见) |
| 证书链 | 完整链(终端证书 + 中间CA),需按顺序拼接为单个PEM文件 |
| x5u托管 | 证书必须托管在一个公网可访问的HTTPS URL上,供验证方在Identity Header中通过x5u参数获取 |
**关键区分**:**SPC Token是“授权令牌”,不是证书**。它证明你有权申请证书,但本身不能用于签名呼叫。签名的密码学操作由**X.509证书 + 对应的PEM私钥**完成。
销售二、开发者需要准备的四类材料
销售2.1 密码学材料
| 材料 | 格式/要求 | 用途 |
|---|---|---|
| 私钥 | 未加密的PEM格式,EC-P256或RSA-2048 | 用于对PASSporT令牌进行密码学签名 |
| CSR | PKCS#10格式,必须包含TNAuthList扩展(OID 1.3.6.1.5.5.7.1.26) | 提交给STI-CA申请证书;TNAuthList中的SPC值必须与SPC Token一致 |
| 证书 | X.509 PEM格式,ECDSA SHA-256 | 随Identity Header中的x5u URL被验证方获取,用于验证签名 |
**TNAuthList是STIR/SHAKEN证书区别于普通TLS证书的核心扩展**。它把证书与你的**SPC(Service Provider Code)** 绑定在一起。CSR中如果缺少TNAuthList扩展,或其中的SPC值与SPC Token不一致,CA会拒绝签发。
销售2.2 授权与注册材料
- **OCN**:参与SHAKEN生态的前置条件
- **STI-PA账户凭证**:用户名、密码、SP ID
- **SPC Token**:从STI-PA获取,用于ACME `spc-token`挑战
销售2.3 托管材料
- **公网HTTPS URL(x5u)** :用于托管X.509证书。这个URL必须持续可用,因为验证方在每次呼叫验证时都可能实时获取证书。Telnyx的托管证书服务要求证书托管在公共HTTPS URL上,私钥以PEM格式上传。
销售2.4 SIP Trunking侧的部署材料
证书到手后,还需要SIP Trunking平台能够**使用这张证书进行签名**。不同平台的支持模式不同:
| 平台 | 签名模式 | 对开发者的要求 |
|---|---|---|
| Telnyx Hosted Certificate | 你提供x5u URL + PEM私钥,Telnyx的托管签名服务用你的证书签名 | 证书托管在公网HTTPS,私钥上传至Telnyx |
| 自建STI-AS(如OpenSIPS/Sansay) | 你自己部署签名服务,使用证书+私钥直接签名 | 需要配置私钥路径、x5u URL和默认attestation等级 |
| Plivo Zentrunk | Plivo用自己的DID和证书签名,A级仅对Plivo DID授予 | 使用Plivo DID时无需自行申请证书;外部号码则无法获得A级 |
**关键认知**:**“拥有证书”不等于“能用证书签名”** 。如果你的SIP Trunking提供商不提供“托管证书”或“自带证书签名”的能力,证书本身无法接入呼叫流程。选型SIP Trunking时,必须确认平台是否支持**用客户自有证书签名**。
销售三、证书如何变成Identity Header:PASSporT的签名链条
开发者常问的“证书和Identity Header是什么关系”,答案是一条清晰的密码学链条:
1. **呼叫发起时**,STI-AS(签名服务)创建一个**PASSporT令牌**,其中包含主叫号码(`orig`)、被叫号码(`dest`)、签发时间(`iat`)和attestation等级(A/B/C)。
2. **PASSporT令牌使用你的X.509证书对应的私钥进行签名**,签名算法为ECDSA SHA-256。
3. **签名后的PASSporT被放入SIP INVITE的Identity Header中**,同时携带`x5u`参数指向你的证书的公共HTTPS URL。
4. **验证方(终止运营商)** 从`x5u` URL获取你的X.509证书,用证书中的公钥验证PASSporT签名,并检查TNAuthList中的SPC是否覆盖主叫号码,最终确定attestation等级。
**这意味着**:证书的**x5u URL必须持续可访问**,私钥必须与证书严格匹配,TNAuthList必须正确覆盖你实际使用的主叫号码。任何一环断裂,签名验证失败,attestation等级会降级或呼叫被标记。
销售四、ACME自动化:从“手工申请”到“证书生命周期管理”
STIR/SHAKEN证书不是“申请一次就永久有效”。证书有有效期(部分CA提供1–365天不等的有效期),过期后签名会失效,attestation等级会下降。手工管理证书续期在规模化运营中不可行。
**ACME(RFC 8555)是STIR/SHAKEN证书自动化的标准路径**。支持ACME的STI-CA(如Peeringhub、Martini Security、Sansay等)允许你通过ACME客户端自动完成:
- 生成私钥和CSR(含TNAuthList扩展)
- 通过`spc-token`挑战提交SPC Token完成授权
- 获取X.509证书
- 在证书到期前自动续期
**Python工具链**:`stir-shaken-toolkit`(Peeringhub开源)提供了完整的ACME工作流,包括CSR生成、SPC Token请求、证书签发和检查。配置时需要STI-PA凭证(`STIPA_USER_ID`、`STIPA_PASSWORD`、`STIPA_SP_ID`)、SPC(`STIPA_SPC`)和X.509主题信息。
**Certify The Web**等ACME客户端也支持STIR/SHAKEN证书,前提是CA支持**Authority Token扩展(TNAuthList标识符)** 。
**对开发者的建议**:如果计划长期运营美国SIP Trunking,**从第一天就采用ACME自动化**,而不是手工下载证书后手动上传。证书过期的后果不是“警告”,而是呼叫签名失效和attestation降级。
销售五、开发者实操检查清单
| 阶段 | 检查项 | 合格标准 |
|---|---|---|
| STI-PA | 是否持有OCN | 有OCN和FCC Form 499申报 |
| STI-PA | 是否完成STI-PA注册 | 有有效的STI-PA账户和SP ID |
| STI-PA | 是否获取SPC Token | Token有效,SPC值与后续CSR一致 |
| 证书申请 | 私钥格式 | 未加密PEM,EC-P256或RSA-2048 |
| 证书申请 | CSR是否含TNAuthList | OID 1.3.6.1.5.5.7.1.26,SPC值正确 |
| 证书申请 | 证书格式 | X.509 PEM,ECDSA SHA-256 |
| 证书申请 | 证书链是否完整 | 终端证书+中间CA,按正确顺序拼接 |
| 托管与部署 | x5u URL | 公网HTTPS可访问,持续可用 |
| 托管与部署 | SIP Trunking平台是否支持自有证书 | 平台支持Hosted Certificate或自建STI-AS |
| 托管与部署 | 私钥与证书是否匹配 | 用openssl验证key pair一致 |
| 生命周期 | 是否配置ACME自动续期 | 证书到期前自动续期,无人工干预 |
| 生命周期 | 是否监控证书有效期 | 到期前30天告警 |
销售总结
**STIR/SHAKEN证书的获取,是一条从OCN到STI-PA、从SPC Token到STI-CA、最终落到X.509 PEM证书和Identity Header的完整链条。** 开发者需要准备的不是一张“证书文件”,而是一组相互绑定的材料:**OCN(准入资格)、SPC Token(授权凭证)、PEM私钥(签名工具)、含TNAuthList的CSR(申请载体)、X.509 PEM证书(验证载体)、公网HTTPS x5u URL(托管载体)** ,以及一个**支持自有证书签名的SIP Trunking平台**。
**最容易被低估的两个环节**:一是**TNAuthList扩展**——没有它,CA不会签发可用于STIR/SHAKEN的证书;二是**SIP Trunking平台的自有证书支持能力**——证书在手但平台不支持托管签名,等于证书无法进入呼叫流程。把这两点前置确认,比在证书申请环节反复调试更省时间。