PHP - Невозможно найти транспортный сокет "ssl" - PullRequest
2 голосов
/ 15 октября 2019

Информация о системе

  • Win 10 Pro x64
  • PHP 7.3.10 x64 TS
  • HTTPD 2.4.34

IВы следовали этому руководству для генерации необходимых ключей и файлов сертификатов.

Как разрешить HTTPS для Apache на локальном хосте?

httpd.conf

LoadModule ssl_module modules/mod_ssl.so

extra / vhosts.conf

<IfModule ssl_module>
    <VirtualHost _default_:443>
        SSLEngine on
        SSLCertificateFile "${CONF_PATH}/certs/localhost.cert"
        SSLCertificateKeyFile "${CONF_PATH}/certs/localhost.key"

        ...
    </VirtualHost>
</IfModule>

php.ini

extension=openssl

[curl]
curl.cainfo="C:\bin\httpd\conf\certs\localhost.cert"

[openssl]
openssl.cafile="C:\bin\httpd\conf\certs\localhost.cert"

Обычно люди говорят, что нужно скопировать libeay32 и ssleay32, но простозадокументируйте это для всех остальных, это больше не файлы, включенные в последние сборки. Они libcrypto и libssh сейчас. Я скопировал их в директорию Apache bin.

Переход на страницу с phpinfo() подтверждает эти настройки, а SSL помечен как включенный.

Давайте сделаем несколько запросов HTTPS.

pecl update-channels
Updating channel "doc.php.net"
Channel "doc.php.net" is up to date
Updating channel "pear.php.net"
Channel "pear.php.net" is not responding over http://, failed with message: Connection to `ssl://pear.php.net:443' failed: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?
Trying channel "pear.php.net" over https:// instead
Cannot retrieve channel.xml for channel "pear.php.net" (Connection to `ssl://pear.php.net:443' failed: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?)
Updating channel "pecl.php.net"
Channel "pecl.php.net" is up to date

Ну, это не хорошо. Я видел несколько предложений по удалению флага -n из сценария PECL. Я так и сделал. Давайте посмотрим, будет ли это по-другому.

pecl update-channels
Updating channel "doc.php.net"
Channel "doc.php.net" is up to date
Updating channel "pear.php.net"
Channel "pear.php.net" is not responding over http://, failed with message: Connection to `ssl://pear.php.net:443' failed:
Trying channel "pear.php.net" over https:// instead
Cannot retrieve channel.xml for channel "pear.php.net" (Connection to `ssl://pear.php.net:443' failed: )
Updating channel "pecl.php.net"
Channel "pecl.php.net" is up to date

Нет, это на самом деле хуже. Теперь есть только меньше деталей о том, почему это терпит неудачу.

У кого-нибудь есть какая-то дополнительная информация, которую я пропускаю здесь, почему у меня нет успеха?

1 Ответ

2 голосов
/ 18 октября 2019

Ваш HTTPD php.ini (который вы отметили с помощью «Переход на страницу с помощью phpinfo ()») может отличаться от вашего pecl (командная строка) php.ini. Убедитесь, что pecl использует php.ini с включенным openssl. См. pecl config-show, также https://stackoverflow.com/a/49623714/68939.

...