Existe uma explicação abrangente de como exatamente a verificação da cadeia de certificados funciona no Apache httpd e como exatamente o parâmetro SSLVerifyDepth o afeta? Possivelmente como pseudo-código.
A maioria das referências apenas menciona isso casualmente.
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslverifydepth
Uma profundidade de 2 significa que os certificados assinados por uma CA intermediária (nível único) são aceitos, ou seja, por uma CA intermediária, cujo certificado de CA é assinado por uma CA diretamente conhecida pelo servidor.
De acordo com meus testes (veja este comentário ) e esta resposta , a verificação da cadeia de certificados no apache funciona assim:
Em palavras:
O certificado raiz final deve estar no SSLCACertificateFile (ou, alternativamente, no SSLCACertificatePath), caso contrário, o certificado do cliente não será aceito como válido. O parâmetro SSLVerifyDepth limita o quão longe a cadeia será apache. Se o limite for atingido, o certificado será rejeitado.
Os certificados intermediários listados no SSLCACertificateFile afetam apenas a construção da cadeia (por exemplo, quando o cliente não envia a cadeia completa, portanto, sem os listados no SSLCACertificateFile apache httpd não teria como alcançar o certificado raiz), mas a validade depende apenas na presença do certificado raiz em SSLCACertificateFile.