Um servidor ou cliente deve poder verificar um certificado de cliente / servidor - cadeia intermediária de certificados com uma raiz raiz conhecida?

2

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:

  1. É legítimo que a chave pública seja uma cadeia que consiste no certificado do servidor / cliente e no certificado intermediário?
  2. E, em caso afirmativo, isso se aplica a ambos os lados (servidor e cliente)?
  3. 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.

    
por Jannis Kappertz 07.07.2017 / 12:06

2 respostas

2
  1. Sim, é bom usar correntes com uma CA intermediária comum.
  2. Sim.
  3. Sim e isso acontece. Você precisa postar a saída de depuração do FreeRADIUS. Dizendo que retorna "erro 20" não é útil. Isso provavelmente não é um erro do FreeRADIUS, mas a saída do OpenSSL.
por 07.07.2017 / 15:02
0

Parece que o problema da minha configuração foi que o cliente não enviou a cadeia completa intermediária do cliente, mas apenas o certificado do cliente (descobri que usando o Wireshark). Ao contrário, o servidor radius enviando uma cadeia intermediária de servidor funciona bem.

Então, para responder à minha pergunta: Sim, essa configuração deve funcionar em ambas as direções .

    
por 02.08.2017 / 11:50