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);
ありがとう。
同じ問題がありましたが、私の解決策は、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
これは、JKSではなく別のタイプのキーストアを読み取ろうとしているとシステムが判断したために発生します。ファイルがJKSであることを指定するか、他の形式に変換する必要があります。
既に.p12への変換を試みているようです。これを正しく行った場合、おそらく他のデフォルトのフォーマットがいくつかあります。代わりにJKSを指定する方法を見つけることをお勧めします。
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>
これにより、バイナリ拡張(または必要な任意の拡張)がフィルターから除外されます。
なぜこれが機能するのかわかりません。しかし、この行が_server.xml
_ ..にある場合.
_keystoreType="PKCS12"
_
...その後、Tomcatは起動せず、代わりにDerInputStream.getLength(): lengthTag=109, too big
エラーが表示されます。
しかし、その行を削除すると、Tomcatは正常に起動します。それが機能する理由はわかりません。汚れている。
私はこの問題を抱えていて、問題は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
私の場合、何かが誤って変更されたことがわかりましたjavax.net.ssl.trustStore
システムプロパティ。 SSLデバッグプロパティ-Djavax.net.debug=ssl:trustmanager
調査に大いに役立ちました。