Si un jar está firmado correctamente, el verificador (a menudo, pero no necesariamente, un cliente de red) necesita solo la raíz, y si usa una CA pública, esa raíz generalmente ya estará allí.
Específicamente, se supone que KeyStore privateKeyEntry debe contener la cadena de certificados completa (aunque si el certificado es autofirmado, la cadena es solo ese certificado). Cuando jarsigner
firma con esa clave privada (por alias) crea una firma separada, PKCS # 7 SignedData que incluye la cadena cert. Para el caso donde el almacén de claves no puede proporcionar la cadena, jarsigner
ya que Java7 tiene la opción -certchain
para agregarlos, consulte enlace .
Para verificar una firma jar (o cualquier firma que contenga una cadena de certificados), Java puede utilizar cualquier cert en la cadena que se encuentra en el almacén de confianza local. Dado que las raíces existen con el propósito de concentrar la confianza para todas las cadenas debajo de ellas, es convencional y más fácil tener solo raíces en el almacén de confianza local. Y JRE incluye un cacerts
predeterminado que contiene casi 100 raíces para CA públicas "conocidas" como Verisign y GoDaddy.
jarsigner -verify -verbose -certs [-keystore if_not_default] test.jar
le mostrará la cadena de certificados utilizada y marcará los certificados (s) que se encuentran en el almacén de confianza con su alias entre paréntesis a la derecha.