我正在使用Centos 7在Digital Ocean的盒子上托管我的一个应用程序中的paypal ipn脚本。
当我尝试连接到paypal沙盒api时,我收到错误“无法连接:SSL已禁用。”
我尝试过几样的事情,例如在我的php.ini文件中添加curl.cainfo的路径,就像这样
curl.cainfo = /etc/pki/tls/certs/ca-bundle.trust.crt
这是我的cURL脚本的样子
// STEP 2: Post IPN data back to paypal to validate
$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); // change to [...]sandbox.paypal[...] when using sandbox to test
curl_setopt($ch, CURLOPT_SSLVERSION, 4);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ecdhe_rsa_aes_128_gcm_sha_256');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
我没有太多的Linux服务器设置经验,所以我在学习,因为我一直在学习。 非常感谢任何帮助或指南
更新:当我在命令行中运行此命令时
curl --version https://sandbox.paypal.com/cgi-bin/webscr
我收到此错误
curl: (1) Protocol "https" not supported or disabled in libcurl
命令curl --version
显示curl 7.42.1 (x86_64-unknown-linux-gnu) libcurl/7.46.0
所以我猜这个新问题将是如何在libcurl中启用https?
答案 0 :(得分:2)
您设置了错误的SSL版本:
curl_setopt($ch, CURLOPT_SSLVERSION, 4);
Paypal sandbox only supports TLS 1.2(CURLOPT_SSLVERSION == 6)。如果您使用PHP 5.5.19+和OpenSSL 1.0.1+,将自动使用正确的SSL版本,或者您可以使用以下内容强制使用它(仍需要OpenSSL 1.0.1 +):
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
答案 1 :(得分:0)
我只希望看到Protocol "https" not supported or disabled in libcurl
如果它运行的是从rpm安装的libcurl 而不是 - 或者如果配置机器故意破坏它是因为有正当理由,或者是非常无能; libcurl的Centos 7 rpm有openSSL作为要求。
了解此处发生的情况并进行修复将需要对目标主机进行root访问才能安装软件。您没有说明您对目标系统的访问权限,并且您可能需要向Digital Ocean支付费用。除非你自己打破它,否则你应该要求Digital Ocean修复它。
答案 2 :(得分:0)
我能够在一位有很多Linux经验的朋友的帮助下解决这个问题。显然这是我的Digital Ocean盒子上安装的cURL版本的问题。
所以解决方法是删除我安装的cURL版本,因为我自己构建了二进制文件,因此我没有正确安装。
我使用这些命令安装了有问题的cURL
wget -O curl.tar.gz http://curl.haxx.se/download/curl-7.42.0.tar.gz
tar -xvzf curl.tar.gz
cd curl-7.42.0
./configure
make
make install
我删除了像这样的https问题的有问题的cURL
which curl
(告诉我可执行文件的位置,它位于usr/local/bin/curl
)
然后我做了
sudo rm -f /usr/local/bin/curl
(删除提出问题的cURL)
然后我使用了命令
sudo yum install curl php5-curl
这为我正确安装了cURL。我跑了
curl --version
确认cURL版本现在支持https,它是。
我退出了我的Droplet并重新登录。然后尝试了
curl --version "https://sandbox.paypal.com/cgi-bin/webscr"
命令,一切正常。我能够连接到Paypal。
感谢大家的帮助和评论。
答案 3 :(得分:-2)
我认为您需要启用fopen socket。您可以询问托管服务提供商