web-dev-qa-db-ja.com

Java「DerInputStream.getLength():lengthTag = 109、大きすぎる」のAPNS証明書エラー。

Java APNSを使用してiOSにプッシュ通知を送信しようとすると、次のエラーメッセージが表示されます。

com.notnoop.exceptions.InvalidSSLConfig:Java.io.IOException:DerInputStream.getLength():lengthTag = 109、too big。

証明書をPersonal Information Exchange(.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);

ありがとう。

16
user3479640

同じ問題がありましたが、私の解決策は、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

12
Zsolt Safrany

これは、JKSではなく別のタイプのキーストアを読み取ろうとしているとシステムが判断したために発生します。ファイルがJKSであることを指定するか、他の形式に変換する必要があります。

既に.p12への変換を試みているようです。これを正しく行った場合、おそらく他のデフォルトのフォーマットがいくつかあります。代わりにJKSを指定する方法を見つけることをお勧めします。

25
user3251514

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
alevilla86

KeystoreType行を削除

なぜこれが機能するのかわかりません。しかし、この行が_server.xml_ ..にある場合.

_keystoreType="PKCS12"
_

...その後、Tomcatは起動せず、代わりにDerInputStream.getLength(): lengthTag=109, too bigエラーが表示されます。

しかし、その行を削除すると、Tomcatは正常に起動します。それが機能する理由はわかりません。汚れている。

2
StackzOfZtuff

私はこの問題を抱えていて、問題は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
2
Dudi Boy

私の場合、何かが誤って変更されたことがわかりましたjavax.net.ssl.trustStoreシステムプロパティ。 SSLデバッグプロパティ-Djavax.net.debug=ssl:trustmanager調査に大いに役立ちました。

0
bedla.czech