Rootop 服务器运维与web架构

php使用自签名证书调用三方接口

自己生成私钥和csr,将csr发给对方,对方为私有ca,给我们颁发证书(公钥),php代码需要配置证书、根证书及私钥访问对方接口。

对方给的证书只有服务器证书,没有给根证书,可以访问对方域名提取,或者命令行获取。

openssl s_client -connect x.x.xgaming.com:443 -showcerts


命令输出的比较多,通过判断 “CN =” 字段来确认是服务器证书、还是中间证书或者根证书。

用浏览器方式导出根证书最方便。

// 设置对方CA根证书(验证服务器身份)
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/ca.crt");
// 设置客户端证书和私钥(双向TLS用)
curl_setopt($ch, CURLOPT_SSLCERT, __DIR__ . "/prod-cert.pem");
curl_setopt($ch, CURLOPT_SSLKEY, __DIR__ . "/PrivateKey.key");

CURLOPT_SSLCERT → 向服务器提供客户端证书(公钥)。
CURLOPT_SSLKEY → 客户端私钥,用于 解密服务器返回的加密数据。
CURLOPT_CAINFO → 用于验证服务器的证书是否可信。

双向tls流程参考:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/user-guide/mutual-tls-authentication
PS:通过 https://decoder.link/result 这个网站可以解析证书内容。

为什么要对方颁发证书给我们?因为对方是根ca,可以免去对方要求自己提供根ca证书的步骤。
# 可以通过下面命令测试mtls
openssl s_client -connect api.example.com:443 -cert client.crt -key client.key -CAfile ca.crt

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5549.html

作者:Venus

服务器运维与性能优化

评论已关闭。