Curl Centos 7上的卷曲获取NSS错误-12188

Curl Centos 7上的卷曲获取NSS错误-12188,curl,openssl,centos7,Curl,Openssl,Centos7,我曾尝试向运行HTTPS的网站发送GET请求,但总是收到curl:(35)同行报告它遇到内部错误。我仅在该网站上收到此错误。当我尝试向Youtube、Google和其他HTTPS网站发送GET请求时,它们与我的curl配合得很好。下面是我的服务器上以curl verbose模式显示的信息 # curl -v https://***.vn > test.htm % Total % Received % Xferd Average Speed Time Time

我曾尝试向运行
HTTPS
的网站发送
GET
请求,但总是收到
curl:(35)同行报告它遇到内部错误。
我仅在该网站上收到此错误。当我尝试向Youtube、Google和其他HTTPS网站发送
GET
请求时,它们与我的curl配合得很好。下面是我的服务器上以curl verbose模式显示的信息

# curl -v https://***.vn > test.htm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   
  Trying 103.x.x.x:443...
* TCP_NODELAY set
* Connected to ***.vn (103.x.x.x) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: none
  CApath: none
* loaded libnssckbi.so
* NSS error -12188 (SSL_ERROR_INTERNAL_ERROR_ALERT)
* Peer reports it experienced an internal error.
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 0
curl: (35) Peer reports it experienced an internal error. 
我已使用
yum update
更新了我的服务器,并将curl更新为最新版本,但仍然无法工作。之后,我尝试从我的Macbook发送一个请求,当读取结果时,我知道我的Mac上的curl也使用ECDHE-RSA-AES256-GCM-SHA384密码以及TSLv1.2

Viets-MacBook-Pro:~ vietnguyen$ curl -v https://*****.vn > test.htm
* Rebuilt URL to: https://*****.vn/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 103.xx.xx.xx...
* TCP_NODELAY set
* Connected to *****.vn (103.xx.xx.xx) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [217 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [93 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3177 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: businessCategory=Private Organization; serialNumber=.....; CN=*****.vn
*  start date: Dec 11 06:22:40 2018 GMT
*  expire date: Dec 11 06:22:40 2020 GMT
*  subjectAltName: host "*****.vn" matched cert's "*****.vn"
*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Extended Validation CA - SHA256 - G3
*  SSL certificate verify ok.
> GET / HTTP/1.1
> Host: *****.vn
> User-Agent: curl/7.54.0
> Accept: */*
> 
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0< HTTP/1.1 200 OK
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Server: Microsoft-IIS/10.0
< X-Powered-By: ASP.NET
< X-XSS-Protection: 1;mode=block
< Date: Thu, 20 Feb 2020 13:41:32 GMT
< Content-Length: 73711
< 
{ [7804 bytes data]
100 73711  100 73711    0     0  39172      0  0:00:01  0:00:01 --:--:-- 39166
* Connection #0 to host *****.vn left intact
我的卷发版本

# curl -V
curl 7.68.0 (x86_64-redhat-linux-gnu) libcurl/7.68.0 NSS/3.44 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.9.0 nghttp2/1.31.1
Release-Date: 2020-01-08
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL UnixSockets
# openssl version
OpenSSL 1.1.1d  10 Sep 2019
我还运行了
yum更新nss-nss-util-nss-sysinit-nss-tools
到最新的nss版本,但仍然无法正常工作

我的openssl版本

# curl -V
curl 7.68.0 (x86_64-redhat-linux-gnu) libcurl/7.68.0 NSS/3.44 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.9.0 nghttp2/1.31.1
Release-Date: 2020-01-08
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL UnixSockets
# openssl version
OpenSSL 1.1.1d  10 Sep 2019
有人能想出办法解决这个问题吗?

首先:我在CentOS 7上有(更新后)

所有这些都与rpmfind一致,除了它的nss为-4,而不是curl 7.68或OpenSSL 1.1.1d。请检查百胜表示您已经安装了什么,以及从哪个repo(右栏)中选择了什么

无论如何,我版本的curl/NSS确实在该服务器上得到了相同的错误。使用wireshark捕获和解码它看起来像一个合理的TLS1.2 ClientHello。我的OpenSSL 1.0.2k(带有RH/CentOS添加的任何补丁)
s_客户机
成功(只要我指定
-servername
,它现在被广泛使用,但在1.0.2中不是默认的),我在另一个系统上为各种1.0.2、1.1.0(相同的servername)和1.1.1(servername现在是默认的)构建的OpenSSL源代码也是如此。由于wget(可用于CentOS7)使用OpenSSL,wget成功了,并且提供了与curl基本相同的功能

经过一些实验(使用Java)后,该服务器似乎在使用rfc5746扩展的其他有效TLS1.2 hello上失败(NSS使用),但如果使用SCSV(OpenSSL使用),则成功。这是相当糟糕的,因为rfc显然需要服务器对两者的支持。但是,除非您对服务器上使用的软件或中间件的开发人员有一定的影响,否则您可能对此无能为力,需要一种解决方法,例如wget

NSS似乎一直在使用扩展而不是SCSV


更奇怪的是,Firefox使用了NSS(尽管我找不到一种方法来判断哪个版本),而我当前的68esr发送了一个带有重新协商扩展(不是SCSV)的TLS1.3 ClientHello并成功。可能是服务器首先检查协议版本,然后以不同的方式处理rfc5746(避免失败),或者根本不进行处理,因为TLS1.3禁止重新协商,使rfc5746完全无效。

您的OpenSSL版本无关紧要;CentOS上的curl使用的是NSS而不是OpenSSL。对于NSS,密码套件名称的拼写不同,请参阅的NSS部分;您需要
ecdhe\u rsa\u aes\u 256\u gcm\u sha\u 384
。您也可以查看openssl s_client-connect$host:443@dave_thompson_085谢谢您的帮助,但是您有什么办法解决我的问题吗?我的curl只在向这个网站发送请求时失败,我到处搜索,但找不到任何解决方案。这个curl构建是从哪里来的?根据我的测试系统,CentOS7 repo中的(唯一)一个是7.29,如果它没有给出任何线索,我会询问服务器它认为问题是什么,或者如果不可用,获取网络跟踪并查看它,可能与另一个客户端(Mac)或openssl(如果可行)的成功比较,虽然我已经看了足够多的TLS跟踪,但我通常不需要进行比较。@dave_thompson_085我刚从yum安装了CURL,您能在您的测试系统上测试CURL的get请求吗?谢谢您的工作,抱歉,但我的英语不是很好,无法100%理解你的答案,但你想说的是我必须使用wget而不是CURL?我是说wget有效,而且很容易替换。还有其他一些方法至少有一些工作的机会,但没有一个像这样简单。很抱歉我的回复太晚,但我喜欢修复CURL,因为我将使用PHP来构建我自己的工具。无论如何,谢谢你的时间。我不相信你能让curl使用NSS工作,除非你构建(然后维护)你自己的修改过的NSS。然而,如果您(重新)从源代码构建curl以使用OpenSSL而不是NSS,那么它应该可以工作。当然,要使用libcurl,您必须重新构建PHP。玩得开心。再次感谢你的时间。我要试一试