Guzzle (35) gnutls_handshake() не удалось: через HTTP был получен неожиданный пакет TLS

Я отправляю запрос API на другой сервер (http://example.com:8180) со своего сервера и получить эту ошибку

«Ошибка cURL 35: сбой gnutls_handshake(): получен неожиданный пакет TLS».

Странно то, что когда я тестировал его на своем локальном и сценическом сервере, проблем не было.

Разница между рабочим и сценическим сервером заключается в наличии ssl.

Но может ли это быть причиной? проблема??

Я как бы полагаю, что речь идет о "php curl", потому что guzzle не работает в коде, но curl по команде работает

и я использовал curl без guzzle в коде, но все равно не работал.

и я установил CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST false

но все равно не работает.

и пока я знаю, что SSL не имеет значения, потому что я пытаюсь подключиться к серверу по HTTP, верно?

там мой скомпилированный php, curl, информация о сервере ниже

PHP Version => 7.2.1

System => Linux ip-x-x-x-x 4.4.0-1060-aws #69-Ubuntu SMP Sun May 20 13:42:07 UTC 2018 x86_64
Build Date => Jan 31 2019 05:39:24
Configure Command =>  './configure'  '--enable-fpm' '--with-openssl' '--with-pdo-mysql' '--enable-mbstring' '--with-libxml-dir' '--enable-intl' '--with-gettext' '--with-mhash' '--with-gd' '--with-pc
re-jit' '--with-zlib' '--enable-bcmath' '--enable-calendar' '--with-zlib-dir' '--with-curl' '--enable-zip'

curl

cURL support => enabled
cURL Information => 7.47.0
Age => 3
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => No
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smb, smbs, smtp, smtps, telnet, tftp
Host => x86_64-pc-linux-gnu
SSL Version => GnuTLS/3.4.10
ZLib Version => 1.2.8

echo | openssl s_client -connect x.x.x.x:8180
CONNECTED(00000003)
139662896404120:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1560955018
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

person jh 2    schedule 19.06.2019    source источник


Ответы (2)


Проблема решена.

Я использую laravel, и был черный ящик, который является вспомогательной функцией route(). Он устанавливает URL-адрес http или https в соответствии с конфигурацией сервера, а рабочий сервер был установлен https

вот почему это вызвало ошибку.

person jh 2    schedule 20.06.2019

Просто для ссылки на эту ошибку, которая может кому-то помочь. Я столкнулся с аналогичной проблемой на моем компьютере с Ubuntu с сервером Apache, которую я решил, создав самозаверяющий сертификат, используя ссылка

< HTTP/1.1 200 Connected
<
* Proxy replied OK to CONNECT request
* found 127 certificates in /etc/ssl/certs/ca-certificates.crt
* found 508 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* gnutls_handshake() failed: An unexpected TLS packet was received.
* Closing connection 0
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

Если вы используете curl и сталкиваетесь с ошибкой ниже, даже после создания сертификата и его включения, вы можете использовать --cacert <certificate name> в своей команде curl.

ошибка: curl: (60) server certificate verification failed.

попробуй так: curl --cacert <certificate_name>.crt https://<your IP>:<Port>

person NPE    schedule 11.07.2020