生成的证书在移动到资源文件夹时停止工作

我在使用生成的证书连接到 Apple 推送服务时遇到问题。当生成的p12文件位于我的src / main / java文件夹中时,一切正常,但我将其移动到src / main /resources,它决定停止使用以下错误:

DerInputStream.getLength(): lengthTag=111, too big.

为了更详细地介绍一下:我正在使用notnoop推送通知库,并按照Ray Wenderlich的教程生成证书。之后,我曾经按照以下命令生成一个p12文件用于java:

openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM
openssl pkcs12 -nocerts -in single.p12 -out single.pem
openssl pkcs12 -export -inkey single.pem -in aps_development.pem -out dual.p12

在那之后,我将 dual.p12 移到了我的 java 项目中。起初,该文件位于我的 /src/main/java 文件夹中,例如 at (而请求该文件的代码位于 )。我通过使用请求输入流com.company.push.certificatescom.company.push

InputStream stream = this.getClass().getResourceAsStream("certificates/dual.p12");

这在开发中工作正常,但在构建项目(使用maven)时则不然,这就是为什么我使用完全相同的包将资源移动到资源文件夹的原因。资源仍然被找到,但现在我得到了上面提到的java.io.IOException

有谁知道可能导致这种情况的原因吗?

Ps:当我将文件移回src / main / java中的软件包时,一切正常,因此证书似乎有效。


答案 1

发生这种情况是因为maven的资源过滤正在损坏您的p12文件。

我们通过在pom.xml中从maven资源过滤中排除p12文件来解决这个问题:

<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>

答案 2

在构建后检查证书文件的内容,当maven已复制到目标/类/...可能是 maven 资源筛选,或者生成中的其他内容正在修改文件。验证类文件夹中的最终内容是否与资源文件夹中的内容完全相同。

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html