Estou tentando testar a seguinte configuração:
Um servidor RADIUS funciona com o protocolo EAP-TLS. O cliente e o servidor possuem os seguintes certificados:
Cliente
Chave pública: clientcert_intermediatecert_chain.pem
Certificado CA: rootcert.pem
Servidor
Chave pública: servercert_intermediatecert_chain.pem
Certificado CA: rootcert.pem
Ambos, o certificado do cliente ( clientcert.pem
) e o certificado do servidor ( servercert.pem
) são assinados pelo mesmo certificado intermediário ( intermediatecert.pem
), que é assinado pelo certificado raiz ( rootcert.pem
).
Ambas as cadeias, que são configuradas para serem as chaves públicas, são colocadas juntas assim (via comando Shell):% cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem
e cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem
Agora, o cliente tenta se conectar ao servidor. Ambos os lados enviam suas chaves públicas e tentam verificar as chaves públicas recebidas com rootcert.pem
Eu sei que a maneira "normal" seria que a chave pública fosse apenas o certificado do servidor ou do cliente. E o certificado da CA seria a cadeia de raiz-raiz-imcert, mas tenho que saber se isso também funcionaria.
Agora, minhas perguntas:
- É legítimo que a chave pública seja uma cadeia que consiste no certificado do servidor / cliente e no certificado intermediário?
- E, em caso afirmativo, isso se aplica a ambos os lados (servidor e cliente)?
- Um servidor (como o FreeRADIUS) ou um cliente deve poder verificar cadeias como estas com o certificado raiz, se as receberem da parte do contador?
Com base na minha experiência, o FreeRADIUS não verifica corretamente essa cadeia de certificados. Se não estou enganado, o FreeRADIUS usa a biblioteca OpenSSL e faz a mesma coisa que o seguinte comando na situação mostrada acima:
openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem
E tenho certeza que isso não funciona. O OpenSSL não pode verificar uma cadeia como esta com o certificado raiz. Falha ao tentar unir a cadeia de confiança.
Está correto?
A propósito, o FreeRADIUS retorna o mesmo erro que o comando verify: error 20 at 0 depth: cannot find issuer certificate
, o que significa que ele não pode unir a cadeia de confiança.