Как проверить сертификат с помощью ocsp с помощью openssl - PullRequest
0 голосов
/ 24 мая 2019

У меня проблема. Я использую openssl для проверки моего сертификата - x509_verify_cert (). Но эта функция не использует ocsp. Так что это может быть проблемой, если нет CRL. В ошибках openssl я нашел это определение - x509_err_ocsp_verify_needed, но я не понимаю, как он использует. Кажется, что может существовать какой-то обратный вызов для моего подключения к функции сервера ocsp или что-то в этом роде. Также я обнаружил, что могу использовать, как я понимаю, для своей собственной функции проверки, но мне нужна только проверка ocsp.

Итак, мой вопрос: можно ли попросить openssl использовать ocsp для проверки и как?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

OpenSSL API не предоставляет ни одного API для проверки OCSP.OpenSSL API предоставляет примитивы, чтобы вы могли реализовать свою собственную проверку.Есть детали, которые вам необходимо заполнить в реализации, которая может зависеть от вашей ситуации, которую вы пытаетесь решить.

Я бы посоветовал вам ознакомиться с командой openssl ocsp в качестве основытвое понимание.Чтение ссылок из ответа Санджива также дает примеры использования этой команды.

Для реализации проверки OCSP вам необходимо:

  1. Извлечь откуда-нибудь сертификаты сервера и эмитента (соединение SSLскорее всего)
  2. Извлечение списка серверов OCSP из сертификата сервера
  3. Создание запроса OCSP с использованием сертификатов сервера и эмитента
  4. Отправка запроса на сервер OCSP и получениеответный ответ
  5. При необходимости подтвердите ответ
  6. Извлеките статус сертификата

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

Вы также можете сгруппировать несколько сертификатов сервера на один и тот же сервер OCSP в один запрос.

Следует отметить, что ссылка на сервер OCSPможет быть не HTTP, и вам может потребоваться поддержка любого типа ссылки, который может иметь сертификат.Например, в корпоративных настройках Windows AD сервер OCSP может иметь только ссылки на сервер LDAP OCSP.

Вам также может понравиться мой ответ на вопрос, где я перехожу к примерам кода OCSP.обработка запросов и ответов.

ОБНОВЛЕНИЕ:

Если вы хотите проверить всю цепочку, вам придется делать вышеупомянутый один сертификат за раз (хотя операции с сертификатами могут перекрываться).Насколько я знаю, нет возможности проверить всю цепочку сразу.Кроме того, вы можете обнаружить, что многие промежуточные сертификаты в любом случае не предоставляют ссылки OCSP, поэтому нет возможности проверить.Если вам нужно сделать это, то было бы неплохо кэшировать результаты, поскольку вы все время будете сталкиваться с одними и теми же промежуточными сертификатами.Фактически вы могли бы запланировать сделать это заранее для «известных» промежуточных сертификатов, которые встречались все это время.

Вы также продолжаете указывать на проверку « x509_verify_cert », которую я цитирую:

Приложения редко вызывают эту функцию напрямую, но она используется OpenSSL для проверки сертификата в коде S / MIME и SSL / TLS.

Так что вам не следуетВ любом случае, это нельзя назвать самим собой.

Возможно, существует какой-то обратный вызов для моего подключения к функции сервера ocsp или что-то в этом роде.

  • X509_STORE_CTX_set_verify_cb - используется для установки обратного вызова для выполнения собственной пользовательской проверки - часто используется в настройках SSL сервера
  • X509_STORE_CTX_set_ex_data - используется для добавления значений пользовательских аргументов, используемых вобратный вызов
  • X509_VERIFY_PARAM_set_flags - используется для установки флагов (например, X509_V_FLAG_CRL_CHECK или X509_V_FLAG_CRL_CHECK_ALL)

В ошибках openssl я нашел это определение - x509_err_ocsp_verify_needed

X509_V_ERR_OCSP_VERIFY_NEEDED определено и никогда не используется в базе кода openssl.Он предназначен для возврата из функции обратного вызова проверки, которую предоставляет пользователь (то есть X509_STORE_CTX_set_verify_cb), чтобы указать, что проверка должна завершиться с ошибкой.Что вы делаете с этой информацией, зависит от вас.Если вы предоставите обратный вызов и вернете эту ошибку из SSL-соединения openssl, соединение SSL будет прервано.

Также следует отметить, что если вы добавите пользовательский обратный вызов проверки, который выполняет полную проверку OCSP, он замедлится.настройки SSL-соединения очень много.Вот почему большинство браузеров не делают этого по умолчанию, так как это сильно замедляет работу пользователя.

0 голосов
/ 24 мая 2019

Возможно:

openssl ocsp -issuer certchain.pem -cert cert.pem -text -url <the ocsp responder URL>

Некоторые ссылки на статьи с более подробной информацией:

https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html

https://akshayranganath.github.io/OCSP-Validation-With-Openssl/

...