带有“DerInputStream.getLength()的Java APNS证书错误:lengthTag = 109,太大了。”

当我尝试使用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); 

谢谢。

发生这种情况是因为系统认为您正在尝试读取不同类型的密钥库而不是JKS。 您需要指定该文件是JKS或将其转换为其他格式。

我看到你已经尝试过转换为.p12。 如果您正确执行此操作,可能还有其他一些默认格式。 我建议找出如何指定JKS。

我有同样的问题但我的解决方案只有在你使用maven时才会帮助你。

Maven资源过滤(让您在资源文件中包含变量)可能会弄乱您的二进制文件 – 并且证书对修改特别敏感。

通常,不应过滤二进制内容。 但我不能简单地禁用资源过滤,因为我有一些包含变量的.properties文件。 所以解决方案是从过滤中排除.p12文件

  [...]   src/main/resources true  **/*.p12    src/main/resources false  **/*.p12    [...]  

有关maven资源过滤的更多信息: http : //maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

如果你使用maven,这可能是因为整个资源文件夹中的Maven过滤。 我上面尝试过Zsolt Safrany解决方案并且没有工作。 但是,阅读他分享的文档,我发现了这个:

  org.apache.maven.plugins maven-resources-plugin 3.0.1   p12    

这不包括被过滤的二进制扩展(或任何你想要的扩展)。