如何在OkHttp中配置证书以调用Starling沙箱API并解决证书路径异常
OkHttp 配置 Starling API 证书信任方案
1. hostname 参数填写规则
直接填写你要请求的 Starling API 的纯域名即可,不要带协议头、端口、路径后缀,例如沙箱环境填 api-sandbox.starlingbank.com,生产环境填对应官方域名。
2. sha256/ 前缀字符串的生成方法
你之前的报错是因为误填了证书原文,该值本质是证书公钥的SHA256哈希值做Base64编码后的结果,生成步骤如下:
- 准备好你从 Starling 官方获取的证书文件(通常为
.pem或.cer格式) - 在终端执行以下openssl命令(Windows系统需先安装openssl工具):
openssl x509 -in 你的证书文件路径.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl base64
- 命令执行后会输出一串Base64编码字符串,在字符串前拼接
sha256/即可得到需要填入的pin值。
3. 完整配置示例
基础OkHttp配置
import okhttp3.CertificatePinner; import okhttp3.OkHttpClient; // 构建证书固定器 CertificatePinner starlingPinner = new CertificatePinner.Builder() // 替换为实际请求域名和生成的pin值 .add("api-sandbox.starlingbank.com", "sha256/替换为你生成的哈希串==") .build(); // 注入到OkHttpClient实例 OkHttpClient client = new OkHttpClient.Builder() .certificatePinner(starlingPinner) .build();
Spring环境适配
如果是在Spring中使用,可将上述配置好的OkHttpClient实例注入到OkHttp3ClientHttpRequestFactory(用于RestTemplate)或ReactorClientHttpConnector(用于WebClient)中,即可全局生效。
注意事项
- 若你拿到的是Starling的根CA或中间CA证书,建议钉CA证书的公钥哈希,后续目标域名更新叶证书时无需修改配置
- 可添加多条pin规则做冗余,避免单证书过期导致请求全失败
- 生产环境不要仅钉叶证书,避免证书轮换导致业务故障
内容的提问来源于stack exchange,提问作者bootlover123
相关产品推荐
相关产品推荐

