如何在phpredis扩展中关闭Redis Session SSL证书验证?
解决phpredis扩展连接自签名证书Redis作为Session存储的证书验证问题
问题原因
你之前在session.save_path里附加verify_peer=false的方式无效,因为phpredis扩展的Session保存路径查询参数不支持传递SSL验证选项,这类参数需要通过流上下文配置来设置。
解决方案一:通过Redis实例绑定Session处理器(推荐)
直接实例化Redis类并配置SSL选项,再将实例绑定为Session处理器,这种方式更直观且参数传递准确:
// 初始化Redis实例 $redis = new Redis(); // 配置SSL连接选项,关闭证书验证 $connectSuccess = $redis->connect( $rUrl['host'], $rUrl['port'], 0, // 超时时间 '', // 持久化ID 0, // 重试间隔 0, // 读超时 [ 'stream' => [ 'verify_peer' => false, 'verify_peer_name' => false, ] ] ); if (!$connectSuccess) { die('Redis连接失败'); } // 认证Redis $redis->auth($rUrl['pass']); // 将Redis实例设置为Session处理器,第二个参数true表示自动关闭Session session_set_save_handler($redis, true); // 启动Session session_start();
解决方案二:通过ini_set配置Redis Session流上下文
如果必须使用ini_set的方式设置Session处理器,可以通过redis.session.stream_context参数传递SSL上下文:
// 定义SSL上下文选项 $sslContext = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ] ]; // 将上下文序列化为字符串后设置到ini配置 ini_set('redis.session.stream_context', serialize($sslContext)); // 设置Session处理器和Redis连接地址 ini_set('session.save_handler', 'redis'); ini_set('session.save_path', 'tls://'.$rUrl['host'].':'.$rUrl['port'].'?auth='.$rUrl['pass']); // 启动Session session_start();
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

