Клиент PHP webDav выдает ClientException: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента

Я хочу загружать файлы в NextCloud через PHP в Windows 11. Я не очень хорошо знаю PHP, но мне удалось установить sabre/dav через композитор

Затем я нашел в Интернете простой пример кода для вывода списка файлов.

<?php

// installed via - composer require sabre/dav

include 'vendor/autoload.php';
use Sabre\DAV\Client;

$settings = array(
    'baseUri' => 'https://cd.wedos.com/remote.php/dav/files/wedos-auth-xxxxxxxx',
    'userName' => '[email protected]',
    'password' => 'myPasssword'
);

$client = new Client($settings);

// Upload a file
//$upload_result = $client->request('PUT', 'test-upload.txt', 'This will be written to the txt file');

// List a folder's contents
$folder_content = $client->propFind('path/to/folder', array(
    '{DAV:}getlastmodified',
    '{DAV:}getcontenttype',
), 1);

Но я получаю эту ошибку

PHP Fatal error:  Uncaught Sabre\HTTP\ClientException: SSL certificate problem: unable to get local issuer certificate in D:\data\projects\erp\php\vendor\sabre\http\lib\Client.php:327

Я искал решение и мне кажется, что у меня есть два варианта

  • Отключите проверку сертификата — это не рекомендуется по соображениям безопасности. Но у меня все равно нет идеала, как это сделать. Я бы хотел попробовать, потому что собираюсь использовать сервер WebDAV и клиент PHP в одной компании.
  • установить/импортировать сертификат
    • Понятия не имею, какой сертификат - от cd.wedos.com?
    • как и куда его сохранить/импортировать?

Есть ли кто-нибудь, кто мог бы мне помочь?

ОБНОВЛЕНИЕ1

Я побежал curl -v cd.wedos.com и получил вот такие результаты

* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=cd.wedos.com
*  start date: Jun  1 15:19:19 2024 GMT
*  expire date: Aug 30 15:19:18 2024 GMT
*  subjectAltName: host "cd.wedos.com" matched cert's "cd.wedos.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
*   Certificate level 0: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type ? (4096/128 Bits/secBits), signed using sha256WithRSAEncryption
* old SSL session ID is stale, removing

Итак, я предполагаю, что проблема в том, что PHP не видит/не использует сертификаты.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
96
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Запустите установщик композитора, который также поставляется с сертификатами. Затем используйте команду composer diagnose, чтобы убедиться, что они доступны.

Затем повторите попытку с помощью PHP-скрипта webdav. Тогда, возможно, это уже решено. Если нет, укажите ту же конфигурацию используемой библиотеки PHP Curl. У SabreWebdav также может быть возможность указать сертификаты, но лучше сделать это для расширения Curl.

Я не знаю, как реализовать то, что вы предложили. Не могли бы вы мне помочь? Проверьте мое обновление1 в вопросе. Кроме того... я запускаю текущий PHP-код в Windows 11 в среде разработки, но позже он будет работать в Debian, где у меня есть только доступ по FTP. Есть ли шанс, что я смогу это исправить, запустив PHP-код?

Radek 22.07.2024 06:15

В Debian вы, скорее всего, не увидите этой проблемы. Если это вариант для вас, я бы посоветовал вам запустить виртуальный сервер с Debian рядом с удаленной системой, чтобы вы могли лучше подготовить транзакцию FTP, не говоря уже о том, чтобы лучше развиваться. Однако небольшое примечание по этому поводу: вы упаковываете дистрибутив (артефакт) локально и никогда не запускаете композитор удаленно (и это хорошо, это распространенная ошибка, о которой вы можете найти множество вопросов в SO, и это просто неправильно/громоздко). /пустая трата времени/непонимание-что такое использование для удаленного выполнения композитора). Сейчас смотрю ваше обновление.

hakre 22.07.2024 22:20

Я думаю, что ответ @olivers более точен, и ссылки, которые он дал, кажутся мне очень хорошими, так что вы, скорее всего, не получите что-то лучшее в разумные сроки. В случае последующей ошибки рассматривайте ее как одну и выполните отдельную диагностику/устранение неполадок. Не путайте это с предыдущей проблемой. Зачастую это два шага вперед, один назад. Мои 2 цента.

hakre 22.07.2024 22:24
Ответ принят как подходящий

Как объясняется в этой PHP.Смотреть статье, проблема специфичен для Windows. В других ОС Curl использует системный список корневых сертификатов:

Эта ошибка встречается редко в системах Linux, BSD и macOS, но довольно часто встречается в Windows, поскольку здесь нет назначенный файл для получения корневых сертификатов, и PHP не отправляет список корневых сертификатов самостоятельно.

Чтобы он работал в Windows, вы можете следовать инструкциям, содержащимся в разделе «Загрузка и обслуживание файла cacert.pem»:

  1. Загрузите файл cacert.pem.

  2. Переместите файл в каталог, доступный PHP и веб-серверу. Например, в C:/php/cacert.pem.

  3. Отредактируйте файл php.ini и измените запись curl.cainfo, указав абсолютный путь к файлу cacert.pem.

  4. При необходимости перезапустите веб-сервер (например, Apache), чтобы перезагрузить файл INI.

Для вашей целевой системы (Debian) она должна работать «из коробки».

Это сработало. Спасибо .. теперь я получаю другую ошибку. ;-) так что первоначальные проблемы были решены. PHP Неустранимая ошибка: Uncaught Sabre\HTTP\ClientHttpException: метод не разрешен в D:\data\projects\erp\php\vendor\sabre\dav\lib\DAV\Client.php‌:303 Трассировка стека: #0 D:\ data\projects\erp\php\vendor\sabre\dav\lib\DAV\Client.php‌​(198): Sabre\DAV\Client->doPropFind() #1 D:\data\projects\erp\php\webDAV -listFiles.php(20): Sabre\DAV\Client->propFind()

Radek 22.07.2024 21:33

@Radek: Это подтверждает, что вы решили проблему с сертификатом и теперь можете подключиться к серверу. HTTP, который есть сейчас. Другое дело, метод HTTP не разрешен. К сожалению, диагностическое сообщение не содержит используемый метод, проверьте свое приложение на предмет этого и, если у вас есть возможность, проверьте журналы доступа/ошибок на удаленной стороне. Это обычно видно в журналах.

hakre 22.07.2024 22:31

@hakre да, проблема с сертификатом решена, но я не знаю, как составить список файлов. Для этого я создал новый вопрос stackoverflow.com/questions/78781742/…

Radek 23.07.2024 07:54

Другие вопросы по теме

Веб-сайт страницы GitHub при наличии собственного домена перенаправляется слишком часто. Как определить ошибку?
Как получить всплывающее меню для выбора сертификата пользователя на сервере Tomcat 10?
Ошибка протокола: Mosquitto — RabbitMQ MQTT через TLS-соединение с локального компьютера на сервер
Запретить Чарльзу отслеживать запросы моего приложения без закрепления SSL в iOS
Почему значения yaml приложения загрузки Spring для SSL игнорируются?
Общедоступный IP-адрес Azure Load Balancer с сертификатом CloudFlate
Мой экспортируемый закрытый ключ нельзя экспортировать
Как мне удалить старые серверы Windows с сертификатами с помощью Powershell (конвейеры выпуска Azure Classic)
Не удалось установить соединение TLS с поддоменом сертификата подстановочного домена с возможностью шифрования
Привязка SSRS SSL HTTPS уже существует для указанного IP-адреса и порта. Ошибка при попытке добавить SSL CERT