我们正在开发Cordova应用程序,并且无法签署Android版本的应用程序.
使用命令
jarsigner -keystore keystore.p12 -storetype pkcs12 android-release-unsigned.apk 1
Run Code Online (Sandbox Code Playgroud)
给出以下例外
java.io.IOException: DerInputStream.getLength(): Redundant length bytes found
Run Code Online (Sandbox Code Playgroud)
来自OpenJDK中的这一行显然是为了修复CVE-2016-5546而添加的,虽然我不太了解加密来真正理解它.
使用openssl导出证书并从中创建新的p12工作正常,但更改签名,这意味着Play商店拒绝上传.
我们的密钥库来自另一家我们最初将应用程序开发外包给的公司.
任何jarsigner或keytool命令抛出相同的异常,我认为这是有意义的,因为它们都使用相同的Java lib
我在使用PFX文件进行XML数字签名时遇到了一些麻烦.运行此代码时出现异常:
KeyStore ks = KeyStore.getInstance("PKCS12");
fs = new FileInputStream(file);
ks.load(fs, "password".toCharArray());
// this line!
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry("alias", new KeyStore.PasswordProtection("password".toCharArray()));
Run Code Online (Sandbox Code Playgroud)
这是例外:
java.security.UnrecoverableKeyException: Get Key failed:
java.security.InvalidKeyException: Invalid RSA private key
at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:435)
at sun.security.pkcs12.PKCS12KeyStore.engineGetEntry(PKCS12KeyStore.java:1306)
at java.security.KeyStore.getEntry(KeyStore.java:1521)
at app.ubl.xml.GenerateSignature.makeSignatureXML(GenerateSignature.java:88)
Caused by: java.io.IOException: DerInputStream.getLength(): Redundant length bytes found
at sun.security.util.DerInputStream.getLength(DerInputStream.java:606)
at sun.security.util.DerInputStream.getLength(DerInputStream.java:569)
at sun.security.util.DerInputStream.getPositiveBigInteger(DerInputStream.java:220)
at sun.security.rsa.RSAPrivateCrtKeyImpl.parseKeyBits(RSAPrivateCrtKeyImpl.java:205)
Run Code Online (Sandbox Code Playgroud)
真正的问题是代码在java中工作1.8.0_111,但错误显示的任何更高版本.
我发现的另一个问题是当我使用以下命令运行此命令keytool:
keytool -list -keystore file.pfx -storepass password -storetype PKCS12 -v
Run Code Online (Sandbox Code Playgroud)
要显示PFX文件的详细信息,那么它只能用于java 1.8.0_111.否则我得到这个例外:
java.util.IllegalFormatConversionException: d != java.lang.String
at …Run Code Online (Sandbox Code Playgroud)