当我尝试使用java APNS将推送通知发送到iOS时,我收到此错误消息:
com.notnoop.exceptions.InvalidSSLConfig:java.io.IOException:DerInputStream.getLength():lengthTag = 109,太大了。
我已经尝试将证书转换为个人信息交换(.p12)也会出现同样的错误。任何人都知道问题以及如何解决它?
以下是我的java代码:
ApnsService service =
APNS.newService()
.withCert("src/net/notification/ck.jks", "******")
.withSandboxDestination()
.build();
String payload = APNS.newPayload().alertBody(record.getSendMsg()).build();
String token = record.getToken();
service.push(token, payload);
感谢。
答案 0 :(得分:22)
这是因为系统认为您正在尝试读取不同类型的密钥库而不是JKS。您需要指定该文件是JKS或将其转换为其他格式。
我看到你已经尝试过转换为.p12。如果您正确执行此操作,可能还有其他一些默认格式。我建议找出如何指定JKS。
答案 1 :(得分:10)
我遇到了同样的问题,但只有在使用 maven 时,我的解决方案才能为您提供帮助。
Maven资源过滤(让你在资源文件中包含变量)可能会弄乱你的二进制文件 - 证书对修改特别敏感。
通常,不应过滤二进制内容。但我不能简单地禁用资源过滤,因为我有一些包含变量的.properties文件。因此解决方案是从过滤中排除.p12文件。
<build>
[...]
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.p12</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.p12</include>
</includes>
</resource>
</resources>
[...]
</build>
有关maven资源过滤的更多信息: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
答案 2 :(得分:3)
如果您使用maven,可能是因为整个资源文件夹中的Maven过滤。我已经尝试过上面的Zsolt Safrany解决方案并且无法正常工作。但是,阅读他分享的文档后,我发现了这一点:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
其中不包括二进制扩展(或任何您想要的扩展)被过滤。
答案 3 :(得分:1)
我不知道为什么会这样。但是如果我有这个payload
server.xml` ..
line in my
...然后,Tomcat将无法启动,并给我一个keystoreType="PKCS12"
错误。
但是,如果我删除该行,那么Tomcat将很好地启动。不知道为什么这样。感觉很脏。
答案 4 :(得分:0)
就我而言,我发现意外更改了javax.net.ssl.trustStore
系统属性。
SSL调试属性-Djavax.net.debug=ssl:trustmanager
对调查的帮助很大。
答案 5 :(得分:0)
我遇到了这个问题,发现问题是truststore.p12
实际上在JKS
中或已损坏。
用于测试信任库是否符合PKCS12的keytool
命令是:
keytool.exe -keystore truststore.p12 -storepass passwordText -list -storetype pkcs12
keytool error: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
我能够通过强制将JKS转换为PKCS12来纠正这一问题。
使用以下说明:
keytool.exe -importkeystore -srckeystore truststore.jks -destkeystore truststore1.p12 -srcstoretype JKS -deststoretype PKCS12
比成功的测试要提供类似以下内容:
keytool.exe -keystore truststore.p12 -storepass passwordText -list -storetype pkcs12
Keystore type: PKCS12
Keystore provider: SunJSSE
Your keystore contains 3 entries
certificates-4, 9 Jul, 2019, trustedCertEntry,
Certificate fingerprint (SHA1): CF:E3:01:1F:A3:30:C5:B1:B9:2B:C5:28:1B:8C:66:71:EA:B8:67:0D
certificates-3, 9 Jul, 2019, trustedCertEntry,
Certificate fingerprint (SHA1): 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18
certificates-2, 9 Jul, 2019, trustedCertEntry,
Certificate fingerprint (SHA1): FA:5F:98:E8:02:2E:81:05:DB:DF:24:48:65:6A:E5:76:C1:31:CB:28