解决curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

最近一台测试机器使用curl访问 https://api-3t.sandbox.paypal.com/nvp,报如下错误。

curl

在其他机器上访问确是正常的。可能是openssl库引起,打算升级下openssl库

wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1.tar.gz
tar xvf openssl-1.0.1.tar.gz
cd openssl-1.0.1
./config --prefix=/usr/local/openssl
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" /etc/ld.so.conf
/sbin/ldconfig -v
openssl version -a

查看版本

opensslversion

编译Curl

wget https://curl.haxx.se/download/archeology/curl-7.15.0.tar.gz
tar xvf curl-7.15.0.tar.gz
cd curl-7.15.0
./configure --disable-shared --prefix=/usr/local/curl --with-ssl=/usr/local/openssl/ 
make && make install
/usr/local/curl/bin/curl -V
#如果编译报relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC错误 请在 configure 后面加上 disable-shared

curlversion

发现 OpenSSl版本为1.0.1

再次测试

/usr/local/curl/bin/curl https://api-3t.sandbox.paypal.com/nvp

curl_paypal

可能由于CA过期,于是到,https://curl.haxx.se/ca/cacert.pem下载最新的CA ,重新编译curl进Curl,cacert.pem是从https://curl.haxx.se/ca/cacert.pem下载下来的。/etc/pki/tls/certs/ca-bundle.crt是目标位置。

./configure --disable-shared --prefix=/usr/local/curl --with-ssl=/usr/local/openssl/  --with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt --with-ca-path=cacert.pem

再次访问,成功了。

/usr/local/curl/bin/curl    https://api-3t.sandbox.paypal.com/nvp

参考文档:

http://www.jb51.net/LINUXjishu/287588.html

https://curl.haxx.se/docs/sslcerts.html

https://curl.haxx.se/ca/cacert.pem

https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1766&expand=true&locale=en_US

此条目发表在服务器应用分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注