PHP Laravel 8 中如何通过Http Client传递.key和.pem格式客户端证书
Laravel Http 客户端配置客户端证书解决方案
你所使用的Http::post()是Laravel框架提供的HTTP客户端(底层基于GuzzleHttp),本身已原生支持客户端SSL证书配置,无需手动封装Curl,具体实现如下:
核心配置方法
和你现有Curl配置的参数一一对应:
withCert(证书路径, [证书密码])等价于Curl的CURLOPT_SSLCERT配置,用于传入公钥证书(.crt/.pem格式)withSslKey(私钥路径, [私钥密码])等价于Curl的CURLOPT_SSLKEY配置,用于传入私钥文件(.key格式)
完整代码示例
// 替换为你实际的证书文件绝对路径 $crtPath = '/path/to/your/client.crt'; $pemPath = '/path/to/your/client.key'; $response = Http::withCert($crtPath) ->withSslKey($pemPath) ->post('https://domainname.com/api/client/session', [ 'xxx' => [ 'xx' => 'xxxx' ] ]); // 业务逻辑处理,和你原有Curl逻辑对齐 if ($response->failed()) { return [ "success" => false, "message" => $response->getErrorMessage() ]; } return [ "success" => true, "data" => $response->json() ];
注意事项
- 请确保证书文件对PHP运行进程有可读权限,否则会触发SSL连接错误
- 建议使用绝对路径传入证书地址,避免相对路径解析错误
- 如果证书/私钥设置了访问密码,把密码作为第二个参数传入对应方法即可,例如
withCert($crtPath, '你的证书密码') - 如果服务端使用自签SSL证书,可在请求前链式调用
->withoutVerifying()跳过SSL校验,等价于Curl的CURLOPT_SSL_VERIFYPEER = false配置
内容的提问来源于stack exchange,提问作者Ali Wehbi
相关产品推荐
相关产品推荐

