Tengo un almacén de claves de Java en el que se han instalado 2 cadenas de certificados. una CA generó y firmó una CSR y se instalaron ambos certificados con las CA correspondientes. sin embargo, cuando envío una solicitud a la aplicación en el puerto, solo se muestra un certificado, pero quiero que se muestren ambos certificados en el almacén de claves para poder autenticarme con el certificado preferido.
necesito ayuda con esto
Respuesta1
Aparte: una CA no firma una CSR; firma un certificado que esparcialmentebasado en el CSR pero en parte no (y ambas partes son importantes).
Tu dices 'aSe generó RSE'. Si realmente creó una CSR (para una clave) y obtuvo dos certificados (cada uno potencialmente con cadena) para esa CSR, e instaló ambas cadenas de certificados en una entrada de clave privada en su tienda, entonces la segunda reemplazó a la primera y solo Ten el segundo en tu tienda.
Supongo que, en cambio, generó dos claves privadas y dos CSR (una para cada clave) y para cada CSR obtuvo una cadena de certificados y la instaló en la clave privada correspondiente, por lo que en realidad tiene dos claves privadas con diferentes cadenas de certificados y desea ver ambas. En caso de duda, utilice keytool -list [-v]
para comprobar.
El protocolo SSL (ahora TLS) no hace eso; el servidor envía solo un certificado de 'entidad' (servidor), con sus certificados de cadena, si los hay, y demuestra la clave privada correspondiente, en un solo apretón de manos.
Túpuedeser capaz de hacer dos solicitudes, cada una de las cuales obtieneunode las cadenas de certificados que desea:
Si los certificados tienen diferentes nombres de Asunto/SAN Y su cliente usa la extensión SNI, lo que hacen los navegadores recientes, pero otro software puede o no, el servidor Java 8 preferirá el certificado que coincida con el SNI. La mayoría de los clientes (¡pero no OpenSSL!) siempre hacen que SNI sea el mismo que el nombre de host al que está conectado, por lo que es posible que necesite (¿temporalmente?) alterar la resolución de su nombre para apuntar múltiples nombres de host al mismo servidor, por ejemplo con su
hosts
archivo o sin vincular o similar .Si los certificados son para diferentes tipos de clave (RSA, DSA, EC) y el cliente ofrece solo conjuntos de cifrado que usan un tipo de clave, el servidor Java usará el certificado para ese tipo de clave. Algunos clientes le permiten controlar fácilmente los conjuntos de cifrado ofrecidos, otros no.
De manera similar, si las cadenas de certificados utilizan diferentes (conjuntos de) algoritmos de firma y el cliente implementa TLS1.2 con la extensión SignatureAlgorithms, entonces el servidor Java 7+ preferirá una cadena de certificados que satisfaga SigAlgs. Pero no conozco ningún cliente que le permita seleccionar SigAlgs fácilmente y, de todos modos, las CA ofrecen pocas opciones sobre qué algoritmos de firma se utilizan en las cadenas para los certificados que emiten.