Задать вопрос
  • Как использовать php-curl вместе с сертификатами НУЦ Минцифры?

    the_alex_mark
    @the_alex_mark
    Разработчик веб-приложений
    /**
     * Формирует параметры верификации запроса.
     *
     * @param  resource $ch Дескриптор cURL.
     * @param  string $path Расположение файла сертификата.
     * @param  int $ttl Интервал обновления сертификата (в минутах). По умолчанию: 7 дней.
     * @return void
     */
    function curl_setopt_verify($ch, $path, $ttl = 10080) {
        $update = true;
        $chain  = [
            'https://curl.haxx.se/ca/cacert.pem',
            'https://gu-st.ru/content/Other/doc/russiantrustedca.pem'
        ];
    
        if (file_exists($path)) {
    
            // Определение необходимости обновления сертификата
            if ((filemtime($path) + ($ttl * 60)) > time())
                $update = false;
    
            else
                @unlink($path);
        }
    
        if ($update) {
            foreach ($chain as $url) {
                if ($content = file_get_contents($url))
                    file_put_contents($path, $content . PHP_EOL, FILE_APPEND | LOCK_EX);
            }
        }
    
        if ($ch) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    
            if (file_exists($path))
                curl_setopt($ch, CURLOPT_CAINFO, $path);
        }
    }
    Ответ написан
    Комментировать