SSL: falha na assinatura do certificado

1

A situação é:

  • existe um certificado raiz (uma "bebida caseira")
  • existe um certificado “intermediário” assinado pelo anterior (também uma “bebida caseira”)
  • existem dois hosts ( A e B ) nos quais os certificados (CA) acima foram instalados em
    /etc/ssl/certs/
  • no host A um certificado C1 (assinado pela CA intermediária) e a chave privada K1 são configurados para serem usados por um ouvinte de rede (SOAP).
  • no host B, um certificado C2 (assinado pela CA intermediária) e a chave privada K2 são configurados para serem usados por um ouvinte de rede (SOAP).

No host A eu posso usar com sucesso os serviços de rede de ambos os hosts e emitir os comandos no host A :

openssl s_client -connect A:18080
openssl s_client -connect B:18080

ambos retornam

...
Verify return code: 0 (ok)
...

No entanto, no host B não consigo usar com êxito nenhum dos serviços de rede (certificados não são validados) e emitindo os comandos no host B :

openssl s_client -connect A:18080
openssl s_client -connect B:18080

ambos retornam

...
Verify return code: 7 (certificate signature failure)
...

Quando a verificação é bem-sucedida, a saída dos comandos acima contém:

CONNECTED(00000003)
depth=2 C = CX, ST = SX, L = Loc, O = Org, emailAddress = [email protected]
verify return:1
depth=1 C = CX, ST = SX, L = Loc, O = Org, emailAddress = [email protected]
verify return:1
depth=0 C = CX, ST = Loc, L = Loc, O = Comp, OU = OX, CN = a.comp.int, emailAddress = [email protected]
verify return:1
---
Certificate chain
 0 s:/C=CX/ST=Loc/L=Loc/O=Comp/OU=OX/CN=a.comp.int/[email protected]
   i:/C=CX/ST=SX/L=Loc/O=Org/[email protected]
---

Quando a verificação falha, a saída dos comandos acima contém:

CONNECTED(00000003)
depth=1 C = CX, ST = SX, L = Loc, O = Org, emailAddress = [email protected]
verify return:1
depth=0 C = CX, ST = Loc, L = Loc, O = Comp, OU = OX, CN = a.comp.int, emailAddress = [email protected]
verify error:num=7:certificate signature failure
verify return:1
depth=0 C = CX, ST = Loc, L = Loc, O = Comp, OU = OX, CN = a.comp.int, emailAddress = [email protected]
verify return:1
---
Certificate chain
 0 s:/C=CX/ST=Loc/L=Loc/O=Comp/OU=OX/CN=a.comp.int/[email protected]
   i:/C=CX/ST=SX/L=Loc/O=Org/[email protected]
---

Alguém pode me ajudar a descobrir onde está a culpa?
É que no host B (aquele que não pode validar os certificados de ether) a cadeia de certificação (Root CA - Intermediary CA) é de alguma forma “quebrada”? O que devo fazer para depurar isso ainda mais?
Embora o openssl no host B não possa validar os certificados dos hosts ether, o Firefox em execução no host B também valida com êxito aqueles - é claro, usando seu próprio armazenamento de certificados onde A CA raiz e a AC intermediária mencionadas acima foram importadas.
Novamente, do lado do host A tudo funciona bem, como esperado.
mais uma coisa: o comando

openssl verify -CAfile /etc/ssl/certs/CA.pem -untrusted /etc/ssl/certs/Int_CA.pem /home/<user>/.ssh/id_b.pub

no host B produz o resultado:

/home/<user>/.ssh/id_b.pub: OK

Então, desta vez tudo parece estar em ordem.

    
por Pok 20.10.2016 / 09:42

0 respostas