OpenSSL - конвертируйте X509 * x509 в файл BIO * через память

Если my_func читает URL-адрес, и вы просто не хотите, чтобы он занимал больше времени, чем заданный период ожидания, если вы используете правильные функции URL-адреса, вы должны указать этот тайм-аут и выполнить сбой вызова, если он занимает больше времени.

Если вы использовали cURL, вы можете использовать curl_multi_exec , чтобы получить это поведение несколько вручную или просто указать время ожидания, а затем функция может вернуть значение false.

Пример:

function my_func($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout after 10 seconds

    // .. set other options as needed
    $result = curl_exec($ch);

    if ($result === false) {
        // timeout or other failure
        return false;
    }
}

Теперь функция не будет работать дольше 10 секунд из-за таймаута. Вы также можете использовать curl_errno () для проверки таймаута:

if (curl_errno($ch) == 28) {
    // timeout was exceeded
}

1
задан Remy Lebeau 18 January 2019 в 04:51
поделиться

1 ответ

Возможно, первым шагом будет преобразование X509* в BIO*. Функция для этого: int i2d_X509_bio(BIO *bp, X509 *x);. Согласно документам https://linux.die.net/man/3/d2i_x509 :

i2d_X509_bio () похож на i2d_X509 () за исключением того, что записывает кодировку структура x в BIO bp, и она возвращает 1 в случае успеха и 0 в случае неудачи.

Получив BIO*, содержащий закодированный сертификат, вы сможете просто поместить его в стек https://wiki.openssl.org/index.php/STACK_API :

/* add value */
#define sk_BIO_insert(st, val, i)       SKM_sk_insert(BIO, (st), (val), (i))
0
ответ дан hauron 18 January 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: