eu tenho um keystore java com 2 cadeias de certificados instaladas. um CSR foi gerado e assinado por uma CA e ambos os certificados com CAs correspondentes foram instalados. no entanto, quando envio uma solicitação ao aplicativo na porta, apenas um certificado é exibido, mas quero que ambos os certificados no armazenamento de chaves sejam exibidos para que eu possa autenticar no certificado preferido.
preciso de ajuda nisso
Responder1
Além: uma CA não assina um CSR; assina um certificado que éparcialmentebaseia-se na RSE, mas em parte não (e ambas as partes são importantes).
Você diz 'aO CSR foi gerado'. Se você realmente criou um CSR (para uma chave) e obteve dois certificados (cada um potencialmente com cadeia) para esse CSR e instalou ambas as cadeias de certificados na entrada de chave privada em sua loja, o segundo substituiu o primeiro e você apenas tenha o segundo em sua loja.
Presumo que você tenha gerado duas chaves privadas e dois CSRs (um para cada chave) e para cada CSR obteve uma cadeia de certificados e a instalou na chave privada correspondente, então você realmente tem duas chaves privadas com cadeias de certificados diferentes e deseja ver ambas. Em caso de dúvida, use keytool -list [-v]
para verificar.
O protocolo SSL (agora TLS) não faz isso; o servidor envia apenas um certificado de 'entidade' (servidor), com seus certificados de cadeia, se houver, e prova a chave privada correspondente, em um handshake.
Vocêpoderiaser capaz de fazer duas solicitações, cada uma das quais recebeumdas cadeias de certificados que você deseja:
Se os certificados tiverem nomes de assunto/SAN diferentes E seu cliente usar a extensão SNI, o que os navegadores recentes fazem, mas outros softwares podem ou não, o servidor Java 8 preferirá o certificado correspondente ao SNI. A maioria dos clientes (mas não OpenSSL!) sempre torna o SNI igual ao nome do host conectado, então você pode precisar alterar (temporariamente?) a resolução do seu nome para apontar vários nomes de host para o mesmo servidor, por exemplo, com seu
hosts
arquivo ou não vinculado ou similar .Se os certificados forem para tipos de chave diferentes (RSA, DSA, EC) e o cliente oferecer apenas conjuntos de criptografia que usam um tipo de chave, o servidor Java usará o certificado para esse tipo de chave. Alguns clientes permitem que você controle facilmente os conjuntos de criptografia oferecidos, outros não.
Da mesma forma, se as cadeias de certificados usarem (conjuntos de) algoritmos de assinatura diferentes e o cliente implementar TLS1.2 com a extensão SignatureAlgorithms, o servidor Java 7+ preferirá uma cadeia de certificados que satisfaça SigAlgs. Mas não conheço nenhum cliente que permita selecionar facilmente SigAlgs e, de qualquer forma, as CAs oferecem poucas opções de quais algoritmos de assinatura são usados em cadeias para certificados que emitem.