Я рву волосы с этой проблемой.
Итак, у меня есть приложение 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. Вопрос в том, как я могу это выяснить, сетевое взаимодействие - это меньшее из моих ИТ-навыков.
Пожалуйста, помогите.