Отличный вывод по openssl - PullRequest
       38

Отличный вывод по openssl

1 голос
/ 28 февраля 2020

Я спрашивал себя, как интерпретировать вывод openssl относительно сертификатов, в зависимости от опции (-text или -purpose). Иногда мне не ясно, например, должен ли сертификат быть центром сертификации или нет.

Пример:

openssl x509 -in /path/to/cert1.pem -purpose -noout
Certificate purposes:
SSL client : Yes
SSL client CA : Yes (WARNING code=3)
SSL server : Yes
SSL server CA : Yes (WARNING code=3)
...

Но:

openssl x509 -in /path/to/cert1.pem -text -noout | grep CA

Это не показывает результат. Однако:

openssl x509 -in /path/to/cert2.pem -purpose -noout 
Certificate purposes:
SSL client : Yes
SSL client CA : Yes
SSL server : Yes
SSL server CA : Yes
...

И:

openssl x509 -in /path/to/cert2.pem -text -noout | grep CA
CA:TRUE

Ответы [ 2 ]

4 голосов
/ 28 февраля 2020

Из предоставленного вами ограниченного вывода кажется, что ваш cert1.pem имеет тип X509v1. Таким образом, его вывод -text не содержит расширение X509v3, которое отображается в вашем результате grep для cert2.pem.

Некоторая поддержка этой гипотезы начинается с выхода для cert1.pem, который включает в себя

SSL client CA : Yes (WARNING code=3)

Документация OpenSSL, касающаяся значения этого предупреждения, ограничена, но, проверяя его исходный код, начиная с приложения apps/x509.c, возвращает к следующую функцию :

static int check_ca(const X509 *x)
{
    /* keyUsage if present should allow cert signing */
    if (ku_reject(x, KU_KEY_CERT_SIGN))
        return 0;
    if (x->ex_flags & EXFLAG_BCONS) {
        if (x->ex_flags & EXFLAG_CA)
            return 1;
        /* If basicConstraints says not a CA then say so */
        else
            return 0;
    } else {
        /* we support V1 roots for...  uh, I don't really know why. */
        if ((x->ex_flags & V1_ROOT) == V1_ROOT)
            return 3;
        /*
         * If key usage present it must have certSign so tolerate it
         */
        else if (x->ex_flags & EXFLAG_KUSAGE)
            return 4;
        /* Older certificates could have Netscape-specific CA types */
        else if (x->ex_flags & EXFLAG_NSCERT && x->ex_nscert & NS_ANY_CA)
            return 5;
        /* can this still be regarded a CA certificate?  I doubt it */
        return 0;
    }
}

где вы видите значение кода 3.

Чтобы проверить, так ли это, просто посмотрите на первую строку в текстовом дампе различных сертификатов, который будет выглядеть следующим образом:

Certificate:
    Data:
        Version: 1 (0x0)

Возвращаясь к странице документации инструмента X509 , теперь имеет смысл следующее:

Если сертификат является сертификатом V1 (и, следовательно, не имеет расширений), и он самозаверяющий, предполагается, что он также является центром сертификации, но снова выдается предупреждение: это позволяет обойти проблему с корнями Verisign, которые являются самозаверяющими сертификатами V1 tes.

0 голосов
/ 02 марта 2020

Из документации x509 :

Клиент SSL CA

Расширение использования расширенного ключа должно отсутствовать или включать OID "аутентификации веб-клиента". Тип сертификата Netscape должен отсутствовать или он должен иметь установленный бит CA CA: это используется в качестве обходного пути, если расширение basicConstraints отсутствует.

Похоже, ваш сертификат не имеет ни расширения x509v3 (basicConstraints) ни расширенное использование). Как сказал @ Reinier-Torenbeek, это означает, что ваш сертификат относится к типу x509 версии 1.

...