You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native对接Heroku托管API的SSL公钥固定方案咨询

Heroku 环境 React Native 公钥模式 SSL Pinning 落地方案

公钥哈希固定操作步骤

你不需要自己签发证书,直接固定Heroku证书链上层CA的公钥哈希即可,完全可以实现证书轮换无感知,具体操作如下:

  • 第一步拉取你Heroku域名的完整证书链,计算各级证书的SPKI(公钥信息)SHA256哈希。直接在本地终端执行命令拉取证书链:
    openssl s_client -connect myapp.herokuapp.com:443 -servername myapp.herokuapp.com -showcerts < /dev/null
    输出结果里会包含从叶子证书、中间CA到根CA的完整证书链,把每一段-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----的内容单独存为pem文件,分别执行以下命令计算公钥哈希:
    openssl x509 -in 对应证书文件.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
  • 不要固定最外层叶子证书的哈希——Heroku默认域名的叶子证书每90天会自动轮换,固定叶子会导致证书轮换后所有请求失败。你只需要选中间CA、根CA两个及以上层级的公钥哈希存入客户端即可,这类上层CA的公钥通常3-5年以上才会变更,完全满足平滑轮换的需求。
  • React Native端选择支持SPKI公钥哈希固定的网络库即可,不要用仅支持固定证书文件的方案。以常用的react-native-ssl-pinning库为例,配置示例如下:
import { fetch } from 'react-native-ssl-pinning';

// 业务请求配置
fetch('https://myapp.herokuapp.com/api/your-path', {
  method: 'POST',
  body: {},
  sslPinning: {
    pk256: [
      // 填入你之前计算好的中间CA公钥哈希
      "中间CA的base64格式sha256哈希",
      // 填入你之前计算好的根CA公钥哈希
      "根CA的base64格式sha256哈希"
    ]
  }
})
  • 建议额外做公钥哈希的远程下发配置,不要把哈希值硬编码死在客户端,万一后续CA变更可以直接远程更新哈希列表,不需要发版。

旧版本兼容方案

完全不会影响现有线上旧版本用户,核心逻辑如下:

  • SSL Pinning是客户端本地的校验逻辑,你不需要对Heroku服务端做任何HTTPS配置调整。所有未集成Pinning逻辑的旧版本App,发起请求时还是走系统默认的证书信任校验流程,和你上线Pinning之前的逻辑完全一致,不会出现请求失败的问题。
  • 上线时按灰度节奏推进即可:
    • 第一个集成Pinning的版本,默认加远程开关控制Pinning逻辑是否启用,初始版本默认关闭校验,先小范围安装测试,确认哈希配置正确、请求无异常后再逐步放量开启。
    • 等集成Pinning能力的新版本覆盖率达到你的业务要求阈值后,再考虑全量开启,全程旧版本用户无感知。
    • 远程开关同时保留降级能力,如果出现证书链异常、CA变更等突发情况,可以临时关闭Pinning校验,先保障业务可用性再做修复。

内容的提问来源于stack exchange,提问作者Gigalink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:27:22