Pergunta

Nosso produto é interrompida em Java versão 1.5.0_13 e gostaríamos de atualizar. Nosso software implementa um grande número de frascos via Java Web Start; todos esses frascos deve ser assinado. No entanto, um par dos frascos não contêm arquivos de classe, e começando com Java versão 1.5.0_14, parece que os escolhe utilidade jarsign não assinar qualquer frasco que não contém arquivos de classe.

O que posso fazer para forçar jarsign a assinar esses frascos? Ou o que posso fazer para distribuir esses frascos através de Java Web Start sem assiná-los? E existe em qualquer lugar onde esta alteração jarsign com versões 1.5.0_14 e acima está documentado? Eu não posso encontrá-lo no notas de lançamento .

Foi útil?

Solução

Eu não sou capaz de verificar que não há qualquer problema. você pode olhar através de e ver o que pode ser diferente em seu ambiente? Estou rodando no Windows 7 RC.

Vamos verificar a versão:

C:\temp>java -version
java version "1.5.0_14"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing)

Vamos ver o que vai ser no nosso jar:

C:\temp>dir /s /b com
C:\temp\com\rdc
C:\temp\com\rdc\test
C:\temp\com\rdc\test\logging.properties

Vamos fazer o jar:

C:\temp>jar -cfv test-source.jar com/*
added manifest
adding: com/rdc/(in = 0) (out= 0)(stored 0%)
adding: com/rdc/test/(in = 0) (out= 0)(stored 0%)
adding: com/rdc/test/logging.properties(in = 13) (out= 15)(deflated -15%)

Vamos sinal do frasco:. Eu estou usando um certificado auto-assinado

C:\temp>jarsigner -signedjar test-dest.jar test-source.jar vinay
Enter Passphrase for keystore:

Warning: The signer certificate will expire within six months.

Vamos ver o que está no nosso jar assinado:

C:\temp>jar tvf test-dest.jar
   155 Wed Jul 15 23:39:12 BST 2009 META-INF/MANIFEST.MF
   276 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.SF
  1130 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.DSA
     0 Wed Jul 15 23:37:18 BST 2009 META-INF/
     0 Wed Jul 15 19:44:44 BST 2009 com/rdc/
     0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/
    13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties

OK, ele certamente parece ter sido assinado, e não tem classes. Vamos olhar o conteúdo de MANIFEST.MF:

Manifest-Version: 1.0
Created-By: 1.5.0_14 (Sun Microsystems Inc.)

Name: com/rdc/test/logging.properties
SHA1-Digest: Ob/S+a7TLh+akYGEFIDugM12S88=

E o conteúdo de VINAY.SF:

Signature-Version: 1.0
Created-By: 1.5.0_14 (Sun Microsystems Inc.)
SHA1-Digest-Manifest-Main-Attributes: 4bEkze9MHmgfBoY+fnoS1V9bRPs=
SHA1-Digest-Manifest: YB8QKIAQPjEYh8PkuGA5G8pW3tw=

Name: com/rdc/test/logging.properties
SHA1-Digest: qXCyrUvUALII7SBNEq4R7G8lVQQ=

Agora, vamos verificar o jar:

C:\temp>jarsigner -verify -verbose test-dest.jar

         155 Wed Jul 15 23:51:34 BST 2009 META-INF/MANIFEST.MF
         276 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.SF
        1131 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.DSA
           0 Wed Jul 15 23:37:18 BST 2009 META-INF/
           0 Wed Jul 15 19:44:44 BST 2009 com/rdc/
           0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/
smk       13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties

  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: This jar contains entries whose signer certificate will expire within
six months. Re-run with the -verbose and -certs options for more details.

Em face disso, tudo parece estar em ordem. você pode verificar se seus certificados expiraram ou foram revogados? Você está usando certificados auto-assinados ou certificados reais? Ou ter eu não entendi qual é seu problema?

Outras dicas

Para qualquer pesquisa sobre este assunto, determinou-se que só afeta certas versões posteriores do Java 1.5, os de 1.5.0_14 em diante, eu acredito. Parece ser fixado nas últimas versões do 1.5, e é definitivamente fixada em 1,6.

Você pode colocar arquivos de classe fictícios em se você precisa. Provavelmente de mau gosto, mas talvez necessário.

BTW, eu tentei a mesma coisa que Vinay, mas com o JDK 1.5.0_17 jarsigner, e um certificado Verisign adequada, e obteve os mesmos resultados. Jarsigner trabalhou, eo frasco verificada usando jarsigner -verify.

Adicionando sobre isso: eu estou usando o Java Web Start, e eu tenho um frasco que contém apenas imagens. Com um JDK 1.6_05 (07, 10, também), e uma geração Formiga, que é assinado sem um problema (com uma cert auto-assinado). Assim, como os outros descrita, não parece estar ligada ao frasco contendo arquivos .class ou não.

É um tiro longo, mas o Ant SignJar tarefa pode ser capaz para convencer jarsign para fazer a coisa certa. Há um monte de opções lá que pode fazer pender a balança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top