2017-03-02 17 views
3

Google은 Cordova 앱을 개발 중이며 Android 버전 앱에 서명하는 데 어려움을 겪고 있습니다. 명령Android 앱에 오류가 발생했습니다. IOException : 중복 길이가 발견되었습니다.

jarsigner -keystore keystore.p12 -storetype pkcs12 android-release-unsigned.apk 1 

를 사용

오픈 JDK apparentlythis line에서이 난 정말 이해에 암호화에 대해 충분히 모르겠지만 CVE-2016-5546를 해결하기 위해 추가되었습니다 오는 다음과 같은 예외

java.io.IOException: DerInputStream.getLength(): Redundant length bytes found 

을 제공합니다 그것.

openssl로 인증서를 내보내고 그로부터 새 p12를 만들면 서명은 변경되지만 재생 저장소가 업로드를 거부한다는 것을 의미합니다.

우리가 원래 가지고있는 다른 회사의 키 스토어는 앱 개발을 아웃소싱했습니다.

모든 jarsigner의 또는 키 도구 명령은 내가 그들 모두가

+0

당신이 오라클의 JDK를 시도 : OpenSSL을을 사용하여 앤더스 응답에서 같이, (나중에 참조 할 수 있도록 명령 줄을 붙여 넣기)와 함께 일? – JimmyB

+0

오라클 8과 9에서 같은 메시지가 나타납니다. ( –

+0

OpenJDK JIRA에서 매우 관련이있는 이슈가 있습니다. https://bugs.openjdk.java.net/browse/JDK-8175251 –

답변

2

lib에는 우리는 같은 문제를 가지고 같은 자바를 사용하기 때문에 의미가 추측 같은 예외가 발생합니다. 우리는 JDK 1.8.0_112가 당신이 말하는 버그가 없다는 것을 발견했습니다.

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mycert.keystore ReadyForSigning.apk 1 
:

keytool -importkeystore -srckeystore temp_keystore.p12 -destkeystore mycert.keystore -srcstoretype pkcs12 

그런 다음 우리는 다음과 같은 명령 (Java\jdk1.8.0_112\bin\jarsigner.exe)를 사용 : 첫째, 우리는 다음 명령 (Java\jdk1.8.0_112\bin\keytool.exe)를 사용하여 mycert.keystoretemp_keystore.p12 변환에서

: 그래서 우리는이 방법으로 문제가 해결

apk입니다 (명령 끝에 "1"은 별칭입니다)

추신 : .p12에서 .keystore으로 변환하지 않아도됩니다.

+0

네 말이 맞아. 지금 우리는 131에 있습니다. 커밋에서 새 수표를 건너 뛰는 깃발을 넣은 것처럼 보입니다. –

1

나는이 문제에 대한 해결책을 찾는 데 시간을 들였습니다. 5 개의 다른 JDK를 사용해 보았지만 아무 것도 효과가 없었습니다. 이전 개발자의 "상속받은"인기있는 Playstore 앱용 PKCS12 인증서가 있는데 JDK 8 + 9에서는 사용하지 않습니다. 올렉산드르의 해결책도 도움이되지 못했습니다.

마지막으로, 거의 행운을 빌어 Weijong Wang의 답변에서 해결책 here을 발견 할 수있었습니다. 여기에는 openssl을 사용하여 인증서를 내보내고 다시 가져 오는 작업이 포함됩니다. 나는 다음 JKS 키 저장소에있는 P12 키 저장소를 다시 가져온하고 지금 JDK와 함께 작동 8.

인용구 :

weijun Weijun 왕은 코멘트 추가 - 2017년 2월 28일 15시 55분
OpenSSL이이 수를 개인 키를 추출 할 때 중복 0을 제거합니다.키와-CERT -nodes -passin 통과 -out

  1. OpenSSL을 PKCS12 -in PKCS12 파일 : 우리는 영향을받는 PKCS12 파일을 정상화하기 위해 다음이 명령을 사용할 수 있습니다 abcXYZ

  2. 있는 OpenSSL PKCS12 - 키와-CERT -export -out 새로운 PKCS12 파일을 전달 -passout : abcXYZ

0

저도 같은 오류를 가지고되었고, 올렉산드르의 솔루션이 작동하지 않을 것을 JDK8에 키 도구 사용으로 (업데이트 151) ce를 읽는 동안 오류가 발생합니다 JDK7로 생성 된 rtificate.

openssl pkcs12 -in android.p12 -out android_fixed.cert -nodes -passin pass:your_p12_password 
openssl pkcs12 -in android_fixed.cert -export -out android_cert.p12 -passout pass:your_p12_password