自己生成私钥和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