OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate  file_get_contents(): Failed to enable crypto in

01 октября 2021 года я столкнулся с проблемой — в проекте на WordPress и PHP 7.0 перестали работать все скрипты, которые получают что-то из вне по https с помощью file_get_contents и wp_remote_get. C wp_remote_get все получилось решить просто:


Но из используемой функции file_get_contents  с проблемой пришлось разбираться чуть более основательно.

В логах nginx ошибка file_get_contents(): Failed to enable crypto in

На все запросы через https. Полностью ошибка выглядела примерно так:


Упоминание OpenSSL и ssl3_get_server_certificate вместе сразу дало направление на гугление в сторону проблем с сертификатами. Так и оказалось.

Истечение корневых сертификатов Lets Encrypt

Вероятно сама проблема связана с истечением 30 сентября 2021 года корневых сертификатов Lets Encrypt. Возможно, также что проблема связана с версией PHP — на проекте используется довольно устаревшая PHP 7.0.

Решение проблемы

Есть несколько способов решения. Т.к. проблема касалась нескольких сайтов на сервере и имелся полный доступ к управлению сервером то я сделал следующее:

Затем в php.ini в раздел openssl прописал следующее:


Перезагрузил php service php7.0-fpm restart  и проблема исчезла.

Рано или поздно и этот сертификат протухнет. Но, судя по https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt серт полученный в 2021 протухнет в 2028. Это приемлимо.