1

일부 암호화 코드의 문제를 해결하는 동안 이상한 스택 트레이스 계층을 보았습니다. orignal 문제를 해결했지만 이와 같은 스택 추적을 생성하는 방법이 궁금합니다. 누구나 나를 계몽시킬 수 있습니까?Java 암호화 공급자 - 이상한 스택 추적

stacktrace를 그대로 복사하여 붙여 넣을 수 없습니다. 독점적 인 코드를 노출시킬 수있는 프레임을 삭제해야합니다.

businesscode.BusinessException: Failed while generating session key 
     at businesscode.businessthing.BusinessMethod(BusinessApp.java:NN) 
     ... NN more 
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider XXX 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     at javax.crypto.KeyGenerator.getInstance(DashoA13*..) 
     at businesslib.generateKey(BusinessLib.java:NN) 
     ... NN more 
Caused by: javax.util.jar.JarException: Cannot parse X.jar 
     at javax.crypto.SunJCE_c.a(DashoA13*..) 
     at javax.crypto.SunJCE_b.b(DashoA13*..) 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     ... 25 more 

이유 및 B (SunJCE_c.a, SunJCE_b.b) DashoA13 * 같은파일 및/광고 정보 등 메소드 이름?

64 비트 Linux 및 32 비트 Windows에서 실행되는 Oracle Java 6 32 비트.

아마도 런타임 최적화로 인해 일부 정보를 사용할 수 없기 때문일 수 있습니다. 아니면 일부 고의적 인 난독 화? JNI?

이 문제의 원인은 제 3 자 암호화 공급자가 jar 파일에 잘못 패키지되었습니다.

편집 원래 문제 (NoSuchProviderException: JCE cannot authenticate the provider...)는 원래의 jar에서 암호화 공급자 클래스를 추출한 순진한 빌드 프로세스로 인해 생성되었으며 새 서명 된 원시 jar로 다시 패키지되었습니다. 그러나 필요한 서명 정보는 없습니다. Siva와 Owlstead에게 서명 한 항아리를 상기시켜 주신 덕분에 :)

답변

1

여기에 몇 가지 옵션이 있습니다 (그리고 나는이 전에 서명이 확인 않았 겠지) : 서명을 생성하는 데 사용 된

  1. 인증서/개인 키가 유효 기간이 지금;
  2. 서명이 최신 버전의 Oracle Java 런타임과 호환되지 않습니다.
  3. .jar의 내용에 대한 서명이 삭제되었거나 내용/서명이 변경되었습니다.

이상한 이름은; 이러한 이름은 코드 난독 화기로 난독 화 된 클래스의 이름입니다. 이 API는 공개 API의 일부가 아니므로 내용을 알 수있는 이유가 없습니다. 여기에는 서명을 확인하는 코드가 포함되어 있으므로 보안과 관련이 있습니다.

+0

.jar 파일에 서명이 포함되어 있지 않으면 OpenJDK/JRE에서 실행할 수 있지만 Oracle JDK/JRE에서는 실행할 수 없습니다. –

+0

고마워, 올빼미.무슨 일이 있었는지는 순진한 도구가 (서명 된, 유효한) 공급자 jar에서 모든 클래스를 추출하여 원래의 META-INF /에서 모든 정보를 제외하고 새로운 항아리에 패키지했습니다. 난독 화에 대한 귀하의 확인은 제가 원했던 것입니다. – Ishan

+0

제 답장에 세 번째 이유가 추가되었습니다. 문제를 발견했기 때문에 기꺼이 받아 들여 주셔서 감사합니다. –

0

제 3 자의 cryto 공급자는 모든 jar 파일, 특히 provider jar에 서명해야합니다. 그 서명은 SUN (지금 oracle)에 의해 신뢰되어야합니다.

+0

감사합니다. Siva. 이는 원래의 문제에 대해 더 많은 것을 밝힙니다. 잘못 구성된 빌드 프로세스가 공급자 jar의 모든 클래스를 추출하고 다른 lib의 다른 클래스와 함께 새 Jar로 묶어 서명을 파기합니다. 여전히 "이상한"스택 추적이 필요한 이유는 무엇입니까? – Ishan

+0

OP 질문에 답변하지 않습니다. 댓글로 추가 될 수 있었습니까? –

0

타원형 호출 서명 (가변 인수 번호)이 아닙니까?

+0

네, 아주 닮았습니다. 여기에 괄호 안에 File : line 정보가 나타납니다. 입력 한 예제 행 (BusinessLib.java : NN)에서 볼 수 있듯이. – Ishan