如何在Laravel项目中配置Wamp本地颁发者证书解决Nexmo短信SSL错误
解决cURL error 60: SSL证书问题(Nexmo + Laravel + Wamp)
这个错误本质是cURL在验证Nexmo服务器的SSL证书时,找不到本地可信的根CA证书,导致无法建立安全连接。下面是具体的解决步骤,分开发环境临时方案和生产级配置两种:
一、生产/正规环境:配置Wamp的OpenSSL根证书
这是推荐的做法,能保证SSL连接的安全性:
下载可信根CA证书包
下载Mozilla维护的标准根CA证书包,保存为cacert.pem(建议放在Wamp的PHP目录下,比如wamp64/bin/php/,方便管理)。修改PHP配置文件
找到你当前Wamp使用的PHP版本对应的php.ini文件(路径一般是wamp64/bin/php/php[你的版本号]/php.ini,比如php8.2.0文件夹下的php.ini):- 打开文件后,搜索找到
curl.cainfo和openssl.cafile这两行 - 去掉行首的分号(取消注释),然后设置为你刚才下载的
cacert.pem的绝对路径,示例:
注意路径要用正斜杠curl.cainfo = "C:/wamp64/bin/php/cacert.pem" openssl.cafile = "C:/wamp64/bin/php/cacert.pem"/或者双反斜杠\\,避免Windows路径的转义问题。
- 打开文件后,搜索找到
重启Wamp服务器
右键点击Wamp托盘图标,选择"Restart All Services",让配置生效。
二、开发环境临时方案(仅限测试用)
如果你只是本地开发测试,不想花时间配置证书,可以临时关闭SSL验证(绝对不要在生产环境使用):
修改你的路由代码,手动给Nexmo客户端的Guzzle设置verify为false:
Route::get('/sms/send/{to}', function($to){ // 手动初始化Nexmo客户端,配置Guzzle选项 $nexmo = new \Nexmo\Client(new \Nexmo\Client\Credentials\Basic( env('NEXMO_KEY'), env('NEXMO_SECRET') )); // 关闭SSL验证(仅开发环境!) $nexmo->setHttpClient(new \GuzzleHttp\Client([ 'verify' => false ])); $message = $nexmo->message()->send([ 'to' => $to, 'from' => env('NEXMO_NUMBER'), 'text' => 'Sending SMS from Laravel. Woohoo!' ]); \Illuminate\Support\Facades\Log::info('sent message: ' . $message['message-id']); return "短信已发送,消息ID:{$message['message-id']}"; });
三、验证配置是否生效
配置完成后,重新访问你的路由/sms/send/[你的手机号],如果没有再出现cURL 60错误,并且日志里能看到消息ID,就说明配置成功了。
内容的提问来源于stack exchange,提问作者Pasha
相关产品推荐
相关产品推荐

