Объяснение SSLVerifyDepth

Есть ли исчерпывающее объяснение, как именно работает проверка цепочки сертификатов в apache httpd и как именно на нее влияет параметр SSLVerifyDepth? Возможно, как псевдокод.

В большинстве ссылок он упоминается просто случайно.

0
задан 16 August 2019 в 12:59
2 ответа

Согласно моим тестам (см. этот комментарий ) и этот ответ , проверка цепочки сертификатов в apache работает следующим образом:

current_certificate := client_certificate_from_request
current_depth := 0
LOOP
  if current_certificate IS self-signed (ie. root)
    if current_certificate IS IN SSLCACertificateFile
      THEN RETURN true // cert is accepted as valid
      ELSE RETURN false // validation failed
    end if
  end if

  current_certificate := current_certificate.getIssuer()
  current_depth += 1
  if current_depth > SSLVerifyDepth
    THEN RETURN false // validation failed
END LOOP // repeat

Говоря словами:

Окончательный корневой сертификат должен быть в SSLCACertificateFile (или альтернативно в SSLCACertificatePath), иначе клиентский сертификат не будет принят действительным. Параметр SSLVerifyDepth ограничивает то, как далеко будет выглядеть apache цепочка. Если это ограничение достигнуто, сертификат отклоняется.

Промежуточные сертификаты, перечисленные в SSLCACertificateFile, влияют только на построение цепочки (например, когда клиент не отправляет всю цепочку, поэтому без сертификатов, перечисленных в SSLCACertificateFile apache httpd не смог бы достичь корневого сертификата), но действительность зависит только от наличия корневого сертификата в SSLCACertificateFile.

.
1
ответ дан 4 December 2019 в 13:19

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslverifydepth

... Глубина на самом деле - это максимальное количество промежуточных эмитентов сертификатов, т.е. количество сертификатов УЦ, которому максимально разрешено следовать при проверке клиентского сертификата.
. Глубина 0 означает, что принимаются только самоподписанные клиентские сертификаты
. глубина по умолчанию 1 означает, что клиентский сертификат может быть самоподписанным или должен быть подписан УЦ, непосредственно знакомым с сервером (т.е. сертификат УЦ находится под SSLCACertificatePath) и т.д.

Глубина 2 означает, что сертификаты, подписанные промежуточным УЦ (одного уровня), принимаются, т.е. промежуточным УЦ, чей сертификат УЦ подписан УЦ, непосредственно знакомым с сервером.

1
ответ дан 4 December 2019 в 13:19

Теги

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