Jarsign이 Jarfiles에 서명하도록 강요하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/976802

  •  13-09-2019
  •  | 
  •  

문제

우리의 제품은 Java 버전 1.5.0_13에서 중단되며 업그레이드하고 싶습니다. 당사의 소프트웨어는 Java Web Start를 통해 많은 수의 항아리를 배포합니다. 이 항아리는 모두 서명해야합니다. 그러나 두 개의 항아리에는 클래스 파일이 포함되어 있지 않으며 Java 버전 1.5.0_14로 시작하여 Jarsign 유틸리티는 클래스 파일이 포함되지 않은 항아리에 서명하지 않기로 선택한 것으로 보입니다.

Jarsign을 강제 로이 항아리에 서명하도록하려면 어떻게해야합니까? 또는 서명하지 않고 Java Web Start를 통해이 항아리를 배포하려면 어떻게해야합니까? 그리고 버전 1.5.0_14 이상으로 Jarsign으로 변경되는 곳이 어디에 있습니까? 나는 그것을 찾을 수 없다 릴리즈 노트.

도움이 되었습니까?

해결책

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

버전을 확인해 봅시다 :

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>dir /s /b com
C:\temp\com\rdc
C:\temp\com\rdc\test
C:\temp\com\rdc\test\logging.properties

항아리를 만들자 :

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>jarsigner -signedjar test-dest.jar test-source.jar vinay
Enter Passphrase for keystore:

Warning: The signer certificate will expire within six months.

서명 된 항아리에 무엇이 있는지 보자 :

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

좋아, 그것은 확실히 서명 된 것으로 보이며 수업이 없습니다. 내용을 보자 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=

그리고의 내용 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=

이제 항아리를 확인해 봅시다.

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.

그것의 얼굴에, 모든 것이 순서대로 보인다. 인증서가 만료되었는지 또는 취소되었는지 확인할 수 있습니까? 자체 서명 된 CERT 또는 실제 CERT를 사용하고 있습니까? 아니면 당신의 문제가 무엇인지 오해 했습니까?

다른 팁

이 문제를 검색하는 사람은 누구나 1.5.0_14 이후의 특정 버전의 Java 1.5 버전에만 영향을 미쳤다고 생각합니다. 최신 버전의 1.5로 고정 된 것으로 보이며 1.6에서 확실히 고정되어 있습니다.

필요한 경우 더미 클래스 파일을 넣을 수 있습니다. 아마 불쾌하지만 아마도 필요할 것입니다.

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

그것에 대해 추가 : Java Web Start를 사용하고 있으며 이미지 만 포함 된 항아리가 있습니다. JDK 1.6_05 (07, 10,)와 Ant Generation을 사용하면 문제없이 서명합니다 (자체 서명 인증서). 따라서 다른 사람들이 설명한 것처럼 .class 파일이 포함 된 항아리와 연결되지 않은 것 같습니다.

긴 샷이지만 개미 Signjar 작업 Jarsign이 옳은 일을하도록 설득 할 수 있습니다. 균형을 기울일 수있는 많은 옵션이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top