背景
php的file_get_contents函数,在服务器(windows server2008)上请求https的网址时,报错,但在本地计算机是可以运行的,放到服务器上则不行。
原因
Windows Server 2008 的内置根证书太旧了,无法识别现代网站的证书(如 Let’s Encrypt)。
解决办法
下载最新的证书文件:cacert.pem
将其保存到服务器某个路径(例如 C:\php\extras\ssl\cacert.pem)。
修改 php.ini,找到 openssl.cafile 配置项:
openssl.cafile="C:\php\extras\ssl\cacert.pem"
重启 Web 服务。