Ошибка SoapClient в PHP на сервере EC2 AWS - PullRequest
0 голосов
/ 24 апреля 2019

Я рву волосы с этой проблемой. Итак, у меня есть приложение PHP, которое я перехожу с «персонального» сервера на AWS-EC2. У меня все установлено на сервере AWS-EC2. Apache2, PHP 7.3, MySql и т. Д. Я тестирую приложение перед выполнением перехода, и при тестировании вызова SoapCliet я получаю следующую ошибку PHP:

WSDL SOAP-ERROR: Parsing WSDL: Couldn t load from "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl"

Я смотрю на ошибку, пытаясь отладить проблему и пробую вызов wget, и получаю следующее:

$ sudo wget https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl

--2019-04-24 14:29:58-- https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl
Resolving celcer.sri.gob.ec (celcer.sri.gob.ec)... 186.42.213.26
Connecting to celcer.sri.gob.ec (celcer.sri.gob.ec)|186.42.213.26|:443... connected.
Unable to establish SSL connection.

Тогда я пытаюсь позвонить cURL:

$ sudo curl -v https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl
Trying 186.42.213.26...
TCP_NODELAY set
Connected to celcer.sri.gob.ec (186.42.213.26) port 443 (#0)
ALPN, offering h2
ALPN, offering http/1.1
successfully set certificate verify locations:
CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
(304) (OUT), TLS handshake, Client hello (1):
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to celcer.sri.gob.ec:443
stopped the pause stream!
Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to celcer.sri.gob.ec:443

Тогда я пробую openSSL:

$ sudo openssl s_client -connect celcer.sri.gob.ec:443
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 319 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
Versions of stuff:
Ubuntu Linux 18.04.2
PHP 7.3
OpenSSL 1.1.1b 26 Feb 2019

Я искал ответ в течение нескольких дней без решения. Очевидно, что все эти команды отлично работают на моем старом сервере (не EC2), хотя версия Ubuntu - 16.04.1, а OpenSSL - 1.0.2g. Я также установил OpenSSL 1.1.1b (чтобы проверить, была ли это проблема с версией) для окон на моем компьютере с успешным подключением к указанному сайту.

Я пытался безуспешно или измениться: -Отключение IPv6 -Использование дополнительных опций, таких как -servername или определенного протокола Указание IP-адреса сервера в файле hosts -Restarting -Обновление Обновление сертификатов CA -Привязка к брандмауэру (оба сервера одинаково настроены)

Я должен сказать, что эта ошибка встречается не на всех сайтах. Фактически, я обнаружил эту проблему только на этом конкретном сайте celcer.sri.gob.ec, который является сайтом местного правительства, и бесполезно и бесполезно даже думать что они что-то меняют (даже если он плохо настроен) и этот IS единственный сайт, который мне нужно намылить.

После нескольких часов чтения и исследования я теперь в отчаянии. Единственное различие, которое я могу найти, состоит в том, что этот новый сервер является сервером AWS EC2, и какой-то межсетевой экран Amazon среднего уровня вызывает эту проблему, но я не знаю, как даже отладить такое утверждение. Моя группа безопасности EC2 просто имеет открытый порт 80 и порт 443 для веб-сервера и SSH для определенного IP.

Пожалуйста, помогите

Редактировать 1: Я пробовал это раньше, те же результаты:

$ openssl s_client -connect celcer.sri.gob.ec:443 -servername celcer.sri.gob.ec
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 319 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

И да, он работает с несколькими другими сайтами https, например:

s$ openssl s_client -connect stackoverflow.com:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
verify return:1
depth=0 C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
 1 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
---
Server certificate, etc, etc....

Редактировать 2: Так как я продолжаю возиться с этим, и с каждой минутой я убежден, что везде есть проблема с AWS, я зашел в свою учетную запись AWS, создал группу безопасности, разрешающую ВСЕ входящий и исходящий трафик, и запустил свежий новый Экземпляр Ubuntu , как только я вошел в систему, я пошел и попробовал openssl, сначала с любого защищенного сайта, а затем с упомянутым сайтом и SAME RESPONSE в обоих случаях, по одному успешному errno = 104.

Затем запустил еще один свежий новый экземпляр на этот раз с Amazon Linux на нем, первым делом после входа в систему и бума ЖЕ ОТВЕТ в обоих случаях, один успешный один errno = 104.

Это интересно, потому что теперь я почти уверен, что это не конфигурация моего сервера, а блокировка межсетевого экрана между amazon и celcer.sri.gob.ec. Вопрос в том, как я могу это выяснить, сетевое взаимодействие - это меньшее из моих ИТ-навыков.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 27 апреля 2019

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

Я выбрал другой регион, и проблема решена.

...