PHP通过SSL证书对接REST API:仅持.cer公钥无私钥和.pem如何发起请求
公钥证书附加到API请求的操作方案
你当前场景下仅需使用对方提供的公钥证书校验服务端身份,无需持有对应私钥,按以下步骤操作即可完成接口调用:
1. 证书格式转换
首先要把.cer格式证书转为接口请求工具通用的.pem格式:
- 若打开
Certificate.cer文件后,内容以-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾,直接将文件后缀重命名为.pem即可;也可以直接复制API提供方给出的证书文本,保存为后缀为.pem的文件直接使用 - 若
Certificate.cer是二进制文件,使用openssl命令完成转换:openssl x509 -inform der -in Certificate.cer -out Certificate.pem
2. 不同场景下的证书附加方式
2.1 curl 命令调用
直接通过--cacert参数指定pem证书路径即可:curl --cacert ./Certificate.pem https://api:555/[你的接口路径]
2.2 Python requests 库调用
在请求的verify参数中传入pem证书路径即可:
import requests response = requests.get( url="https://api:555/[你的接口路径]", verify="./Certificate.pem" )
不要为了方便直接设置verify=False,会存在中间人攻击风险
2.3 Java 项目调用
先将pem证书导入自定义信任库:keytool -import -alias api_server_cert -file ./Certificate.pem -keystore ./api_truststore.jks
执行命令后按提示设置信任库密码即可。
调用接口前配置JVM信任库参数:
// 加载自定义信任库 System.setProperty("javax.net.ssl.trustStore", "./api_truststore.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "你设置的信任库密码"); // 后续正常发起HTTPS请求即可
额外说明
- API提供方给出的
123.33.33.33 22为SSH服务相关信息,和本次API接口调用无关,无需使用 - 整个调用过程仅需使用服务端公钥证书校验身份,不需要你持有对应私钥
内容的提问来源于stack exchange,提问作者Hosain Ahmed
相关产品推荐
相关产品推荐

