Java APNS Certificate Error with “DerInputStream.getLength(): lengthTag=109, too big”。。

2022-09-02 11:20:49

当我尝试使用java APNS将推送通知发送到iOS时,我收到以下错误消息:

com.notnoop.exceptions.InvalidSSLConfig: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

我已经尝试将证书转换为个人信息交换(.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);

谢谢。


答案 1

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

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


答案 2

我有同样的问题,但我的解决方案只有在你使用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


推荐