2009-06-10 4 views
4

저희 제품은 Java 버전 1.5.0_13에서 중단되었으며 업그레이드하고 싶습니다. 우리의 소프트웨어는 Java Web Start를 통해 많은 jar 파일을 배포합니다. 이 항아리에는 모두 서명해야합니다. 그러나 몇 개의 jar에는 클래스 파일이 포함되어 있지 않으며 Java 버전 1.5.0_14부터 jarsign 유틸리티는 클래스 파일을 포함하지 않는 jar에 서명하지 않는 것으로 나타납니다.jarsign을 강제로 jarfiles에 서명하려면 어떻게합니까?

jarsign이 이러한 병에 서명하도록하려면 어떻게해야합니까? 또는 서명없이 Java Web Start를 통해이 jar를 배포하려면 어떻게해야합니까? 그리고 버전 1.5.0_14 이상의 jarsign에 대한이 변경 사항이 문서화되어있는 곳이 어디 있습니까? release notes에서 찾을 수 없습니다.

+1

서명 된 jar 파일을 만드는 데 사용하는 명령을 표시 할 수 있습니까? – notnoop

답변

9

어떤 문제가 있는지 확인할 수 없습니다. 당신의 환경에서 무엇이 다른지 살펴보고 볼 수 있습니까? Windows 7 RC에서 실행 중입니다.

 
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%) 

이의이 항아리에 서명하자

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

이의이 항아리를 만들어 보자 :

 
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) 

이의 우리의 항아리에있을거야 무엇을 보자 :

의이 버전을 확인하자 : 자체 서명 인증서를 사용하고 있습니다.

 
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, 확실히 체결 된 것으로 나타납니다, 그것은 어떤 클래스가 없습니다 :

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

Warning: The signer certificate will expire within six months. 

은의 우리의 서명 항아리에 무엇을 보자. 모든이 나타납니다 그것의 얼굴에

 
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. 

:의이 항아리를 확인하자, 이제

 
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= 

:

 
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= 

그리고 VINAY.SF의 내용 :의는 MANIFEST.MF의 내용을 살펴 보자 순서대로. 인증서가 만료되었거나 철회되었는지 확인할 수 있습니까? 자체 서명 된 인증서 또는 실제 인증서를 사용하고 있습니까? 아니면 당신의 문제가 오해 한 것입니까?

1

더미 클래스 파일을 필요할 때 넣을 수 있습니다. 아마도 불쾌하지만 어쩌면 필요할지도 모릅니다.

+3

예, Hello World Java 응용 프로그램의 용도를 찾았습니다. :) – akarnokd

1

길게 찍었지 만 개미 SignJar task은 옳은 일을하도록 jarsign을 설득 할 수 있습니다. 거기에 균형을 팁 수있는 옵션이 잔뜩 있어요.

1

BTW, 나는 Vinay와 같은 것을 시도했지만 JDK 1.5.0_17 jarsigner와 적절한 Verisign 인증서를 사용하여 동일한 결과를 얻었습니다. Jarsigner가 작동하고 jarsigner -verify를 사용하여 jar가 확인되었습니다.

1

추가 정보 : Java Web Start를 사용하고 있으며 이미지 만 들어있는 병이 있습니다. JDK 1.6_05 (07, 10도) 및 Ant 세대에서는 문제없이 서명됩니다 (자체 서명 된 인증서 포함). 다른 설명과 마찬가지로, .class 파일을 포함하는 jar 파일과 링크되지 않은 것 같지 않습니다.

2

이 문제를 검색하는 사용자는 1.5.0_14 이후 버전의 특정 Java 1.5에만 영향을 미친다 고 판단했습니다. 1.5의 최신 버전에서 수정 된 것으로 보이며 1.6에서 확실히 수정되었습니다.

관련 문제