Php 在同一本地主机上调用API时出现SSL验证服务器证书错误(tls\u进程\u服务器\u证书:证书验证失败)

Php 在同一本地主机上调用API时出现SSL验证服务器证书错误(tls\u进程\u服务器\u证书:证书验证失败),php,apache,ssl,rhel,Php,Apache,Ssl,Rhel,我的困境是,我有两个域在本地主机上运行,域a和域b。他们都在运行nginx、apache和php-fpm。域_a运行CodeIgniter 3.0.0,域_b运行CodeIgniter 4。在另一个VM中,我将域a放在Docker容器中,并且能够无任何问题地访问域b中的API端点。开发工作要求它们都在同一台服务器上,因为这与在其他环境中的情况非常接近 具体来说,我们使用的是PHPOuth模块,它会抛出一个错误“使请求失败(不知道为什么)”,这非常有用。经过一些挖掘,我发现我可以毫无问题地访问其他

我的困境是,我有两个域在本地主机上运行,域a和域b。他们都在运行nginx、apache和php-fpm。域_a运行CodeIgniter 3.0.0,域_b运行CodeIgniter 4。在另一个VM中,我将域a放在Docker容器中,并且能够无任何问题地访问域b中的API端点。开发工作要求它们都在同一台服务器上,因为这与在其他环境中的情况非常接近

具体来说,我们使用的是PHPOuth模块,它会抛出一个错误“使请求失败(不知道为什么)”,这非常有用。经过一些挖掘,我发现我可以毫无问题地访问其他端点(例如google.com和这些域之外的已知端点)。我试图用cURL代替oAuth(只是一个简单的测试来达到端点),但我始终得到相同的错误

tls\u进程\u服务器\u证书:证书验证失败

我使用的证书对这两个域都是自签名的,并且我能够从浏览器中访问这两个域而不会出现问题。如果重要的话,两个域在登录时都有用户证书,但用户不一样,因为每个域都有自己的自签名CA

我目前的代码是:

$conn = new OAuth($consumer_key, $consumer_secret, $oauth_sig_method);
$conn->enableDebug();
/*
if (is_on_local()) {
  $conn->setCAPath('path/to/cert.cert');
}*/
$conn->disableSSLChecks();
$token = $conn->getRequestToken($auth_url);
我将注释掉的部分留在了中,以展示我的尝试-我尝试将其指向系统证书、域a CA和域b CA,但这些都不起作用。看起来(出于某种原因)
$conn->disableSSLChecks()
不起作用,但我不确定。调用
getRequestToken()
时抛出错误

我的etc/hosts文件:

127.0.0.1 domain_a.tld
127.0.0.1 domain_b.tld
实际的TLD不是
TLD
,但是,它们在浏览器中工作,并且在Docker中的domain_a之前工作过

我已经对域进行了足够的调整,使CI 3可以与PHP8一起工作,因此我确信问题在于从一个域到另一个域的对话。我正在运行RHEL8,并且我已经将SELinux设置为Permissive(实际上,我认为是为了开发而禁用的)。httpd、nginx、php-fpm或防火墙日志中没有任何内容。我拥有的唯一指标是从域a中的CI 3日志中获得的信息:

Severity: Warning --> OAuth::getRequestToken(): SSL operation failed with code 1. 
   OpenSSL Error messages:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /path/to/file
Severity: Warning --> OAuth::getRequestToken(): Failed to enable crypto in /path/to/file
Severity: Warning --> OAuth::getRequestToken(domain_b/oauth/access): Failed to open stream: operation failed in /path/to/file

我觉得答案就在那里,只是看不到而已。

像往常一样,在解释了我的问题后不久,我找到了解决方案。 目前,我的端点为
https://domain_b.tld/oauth/access
。经过一些修补,我得到了一个关于SSL版本的不同错误。这让我找到了正确的答案:
http://domain_b.tld:port/oauth/access
。我现在可以顺利到达终点了。我有一个虚拟主机文件,即使两个域在同一个端口上,我也必须指定它,否则调用会失败。 如果其他人遇到此问题,请检查基本URL。我从来没有想过使用
http
而不是
https
作为解决方案