Как определить, какой файл корневых сертификатов используется программой OpenSSL в операционной системе Debian?

Добрый день. <br/> У меня есть достаточно старый веб-сервер с Debian, и недавно возникла проблема: PHP-скрипт с использованием file_get_contents() начал выдавать ошибку: <br/> <b>file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed</b>. <br/> При выполнении команды openssl s_client -connect somesite.ru:443 в консоли я получаю ответ <b>Verify return code: 19 (self signed certificate in certificate chain)</b>. <br/> Я предположил, что это может быть связано с отсутствием корневого сертификата на сервере. Я скачал обновлённый файл корневых сертификатов и поместил его в каталог /usr/local/share с именем ca-certificates.crt, после чего выполнил команду update-ca-certificates. Файл ca-certificates.crt в каталоге /etc/ssl/certs/ обновился. <br/> Тем не менее, команда openssl s_client -connect somesite.ru:443 продолжает выдавать ответ <b>Verify return code: 19 (self signed certificate in certificate chain)</b>. <br/> Если я явно указываю файл с сертификатами (openssl s_client -connect somesite.ru:443 -CAfile /etc/ssl/certs/ca-certificates.crt), то получаю ответ <b>Verify return code: 0 (ok)</b>. <br/> Как мне определить, какой файл корневых сертификатов использует openssl в данном случае?
  • 9 января 2025 г. 14:44
Ответы на вопрос 3
В Debian (и в большинстве дистрибутивов Linux) OpenSSL по умолчанию использует систему управления сертификатами, которая хранит корневые сертификаты по умолчанию в каталоге `/etc/ssl/certs/`. Однако, разные версии OpenSSL могут иметь разные пути или конфигурации. Чтобы определить, какой файл корневых сертификатов используется OpenSSL, можно выполнить следующие действия:

1. **Проверьте конфигурацию OpenSSL**: Выполните команду:

    ```bash
    openssl version -d
    ```

   Эта команда покажет вам путь к конфигурационному файлу OpenSSL. Обычно это что-то вроде `/etc/ssl/openssl.cnf`.

2. **Откройте файл конфигурации**: Посмотрите, есть ли в этом файле настройка `CApath` или `CAfile`. Например, там могут быть указаны:

    ```
    [ CA_default ]
    dir             = /etc/ssl/certs
    ```

   Это указывает путь к каталогу, в котором OpenSSL ищет корневые сертификаты. Если там указано `CAfile`, то это конкретный файл, который используется.

3. **Проверьте переменные окружения**: Убедитесь, что у вас нет ни одной переменной окружения, которая могла бы переопределять путь к файлу сертификатов, например, `SSL_CERT_FILE` или `SSL_CERT_DIR`.

4. **Проверьте наличие альтернативных путей сертификатов**: Может существовать и другой путь, в зависимости от установленных приложений. Например, некоторые приложения могут использовать свои собственные хранилища сертификатов.

5. **Используйте `-CAfile` и `-CApath`**: Как вы уже заметили, можно явно указать OpenSSL использовать определенные файлы сертификатов. Это хорошая практика для тестирования, особенно когда у вас есть сомнения относительно настроек по умолчанию.

6. **Определите версии OpenSSL**: Разные версии OpenSSL могут иметь разные настройки. Убедитесь, что ваша версия OpenSSL актуальна и что у вас есть последние обновления корневых сертификатов.

Если проблема с сертификатами продолжает возникать, возможно, стоит проверить и другие факторы, такие как:

- Исчерпание сертификатов.
- Неправильные цепочки сертификатов на стороне сервера.
- Наличие других механизмов в PHP для проверки SSL (например, разные настройки в `php.ini`).

Обновление списка корневых сертификатов через `update-ca-certificates` обычно решает большинство проблем, связанных с сертификатами, но в некоторых случаях могут потребоваться дополнительные шаги или настройки.
Спасибо, у моего аналогично /usr/lib/ssl с симлинками в /etc/ssl 
Но тогда я вообще не понимаю, почему без явного указания файла с сертификатами, openssl s_client -connect somesite.ru:443 не находит сертификата :(
openssl version -d 

У моего дебиана это /usr/lib/ssl с симлинками в /etc/ssl

(спасибо https://stackoverflow.com/questions/4138139/how-to... , сам нее помнил)
Похожие вопросы