Signature for JavaでGroupDocsSignatureExceptionが発生

はじめまして

当方、 GroupDocs.Signature for Javaを使用し、PDFに電子証明書を付加しようとしています。
その時、signature.sign()でPDFに署名して保存する所でGroupDocsSignatureExceptionが発生します。
解決策のご教授をお願いいたします

OS: Windows
Java: JRE8

該当ソース

// Setup license.
Path p = Paths.get("");
com.groupdocs.signature.licensing.License licenseSignature = new com.groupdocs.signature.licensing.License();
licenseSignature.setLicense(p.toAbsolutePath() + "\\lic\\GroupDocs.Signature.Java.lic");


// Java を使用してデジタル署名証明書で PDF に署名する Java コード
Signature signature = new Signature(p.toAbsolutePath() + "\\tmp\\Test.pdf");

DigitalSignOptions options = new DigitalSignOptions(p.toAbsolutePath() + "\\tmp\\test.p12");
options.setVisible(false);
options.setPassword("#######");

// 文書に署名してファイルに保存する
signature.sign(p.toAbsolutePath() + "\\tmp\\Sign.pdf", options);

実行ログを以下に掲載します。

com.groupdocs.signature.exception.GroupDocsSignatureException: java.lang.NullPointerException
at com.groupdocs.signature.exception.a.b(Unknown Source)
at com.groupdocs.signature.exception.a.d(Unknown Source)
at com.groupdocs.signature.Signature.a(Unknown Source)
at com.groupdocs.signature.Signature.a(Unknown Source)
at com.groupdocs.signature.Signature.sign(Unknown Source)
at com.groupdocs.signature.Signature.sign(Unknown Source)
at DataLinkBatch.startBatch(DataLinkBatch.java:107)
at DataLinkBatch.access$0(DataLinkBatch.java:77)
at DataLinkBatch$1.run(DataLinkBatch.java:67)

認証局で発行したkeystoreファイルの内容は以下となります。

キーストアのタイプ: PKCS12
キーストア・プロバイダ: SunJSSE

キーストアには1エントリが含まれます

別名: 1
作成日: 2024/12/06
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 3
証明書[1]:
所有者: CN=######, O=######, L=######, ST=######, C=JP
発行者: CN=###### RSA CA 2023, O=“######”, C=JP
シリアル番号: 3b2bb0cdfbe25eee3e27aca2bc2d5bb6
有効期間の開始日: Tue Dec 03 14:42:52 JST 2024 終了日: Fri Jan 10 23:59:59 JST 2025
証明書のフィンガプリント:
MD5: 3D:CC:A5:41:04:8C:D4:97:02:82:40:68:54:D5:BC:36
SHA1: F4:B9:20:D3:9C:52:0E:25:83:07:AF:56:9D:45:91:B4:42:98:A4:CE
SHA256: BB:2D:72:32:E5:C1:CD:5D:96:A3:5D:7F:11:5C:C5:DB:71:E8:D1:45:09:4A:B9:FA:AC:25:1D:EB:CB:DD:4B:ED
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 4096ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: caIssuers
accessLocation: URIName: http://repo2.######.net/spcpp/pfm20pub/docrsaca2023/docrsaca2023.cer
,
accessMethod: ocsp
accessLocation: URIName: http://docrsaca2023.ocsp.######-cert.jp
]
]

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B7 21 66 C2 55 45 E7 93 4E A2 C8 AD 5D B4 06 32 .!f.UE…N…]…2
0010: 42 CE E1 D9 B…
]
]

#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://repo1.######.net/spcpp/pfm20pub/docrsaca2023/docrsaca2023.crl]
]]

#4: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [1.2.392.200091.100.381.5]
[PolicyQualifierInfo: [
qualifierID: 1.3.6.1.5.5.7.2.1
qualifier: 0000: 16 2B 68 74 74 70 3A 2F 2F 72 65 70 6F 31 2E 73 .+http://repo1.s
0010: 65 63 6F 6D 74 72 75 73 74 2E 6E 65 74 2F 73 70 ecomtrust.net/sp
0020: 63 70 70 2F 70 66 6D 32 30 70 75 62 2F cpp/pfm20pub/

]] ]
]

#5: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
1.3.6.1.4.1.311.10.3.12
]

#6: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
DigitalSignature
Non_repudiation
]

#7: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 5C 45 AA 66 86 05 7B 90 10 08 DF 73 8A 6C 3E 62 \E.f…s.l>b
0010: B9 6B 47 1D .kG.
]
]

証明書[2]:
所有者: CN=###### RSA CA 2023, O=“######”, C=JP
発行者: CN=######, O=“######”, C=JP
シリアル番号: 10000041c223af622a83408eb6d397d
有効期間の開始日: Fri Feb 24 15:53:38 JST 2023 終了日: Sun Feb 01 09:00:00 JST 2043
証明書のフィンガプリント:
MD5: A5:D6:35:60:3C:25:ED:36:E7:1F:F4:B2:BB:C6:63:AA
SHA1: 68:B0:7E:CC:D5:77:3A:AD:2A:F5:23:87:F0:C6:07:FA:40:93:ED:41
SHA256: 36:8A:62:B8:9C:97:13:66:2E:40:9A:B7:DF:72:25:25:D6:B2:26:55:1B:51:8F:96:05:59:EE:1D:F0:FF:A1:6E
署名アルゴリズム名: SHA384withRSA
サブジェクト公開鍵アルゴリズム: 4096ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: ocsp
accessLocation: URIName: http://rsarootca2023.ocsp.######-cert.jp
,
accessMethod: caIssuers
accessLocation: URIName: http://repo2.######.net/root/rsa/rsarootca2023.cer
]
]

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 51 33 6A 2A EF DB 1F 80 ED B2 C6 D3 06 D2 25 93 Q3j*…%.
0010: C4 C8 B6 66 …f
]
]

#3: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:0
]

#4: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://repo1.######.net/root/rsa/rsarootca2023.crl]
]]

#5: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [1.2.392.200091.100.901.9]
[PolicyQualifierInfo: [
qualifierID: 1.3.6.1.5.5.7.2.1
qualifier: 0000: 16 25 68 74 74 70 3A 2F 2F 72 65 70 6F 31 2E 73 .%http://repo1.s
0010: 65 63 6F 6D 74 72 75 73 74 2E 6E 65 74 2F 72 6F ecomtrust.net/ro
0020: 6F 74 2F 72 73 61 2F ot/rsa/

]] ]
]

#6: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
1.3.6.1.4.1.311.10.3.12
]

#7: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
Key_CertSign
Crl_Sign
]

#8: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: B7 21 66 C2 55 45 E7 93 4E A2 C8 AD 5D B4 06 32 .!f.UE…N…]…2
0010: 42 CE E1 D9 B…
]
]

証明書[3]:
所有者: CN=######, O=“######”, C=JP
発行者: CN=######, O=“######”, C=JP
シリアル番号: 99b8098d4418dddb
有効期間の開始日: Wed Jan 25 17:03:37 JST 2023 終了日: Wed Jan 01 17:03:37 JST 2048
証明書のフィンガプリント:
MD5: 62:8D:09:F7:8B:15:04:1C:33:22:8E:A3:CC:AC:32:CA
SHA1: 4E:00:44:13:48:5C:14:5D:9F:DE:64:AD:B1:67:56:E8:F2:6A:AC:8A
SHA256: 2C:15:42:35:52:8D:70:17:90:B6:75:AF:F6:E1:97:08:27:B1:0E:D6:65:E9:13:83:5B:F4:6E:34:60:FD:5C:84
署名アルゴリズム名: SHA384withRSA
サブジェクト公開鍵アルゴリズム: 4096ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]

#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
Key_CertSign
Crl_Sign
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 51 33 6A 2A EF DB 1F 80 ED B2 C6 D3 06 D2 25 93 Q3j*…%.
0010: C4 C8 B6 66 …f
]
]



お手数をお掛けいたしますがご教授いただけると幸いです。

@yoshi.sana

GroupDocs.SignatureExceptionが発生する原因はいくつか考えられます。以下の手順を試して、問題を特定し解決することができます。

  1. ライセンスの確認: ライセンスファイルが正しく設定されているか確認してください。パスが正しいか、ファイルが存在するかを確認します。

  2. 証明書のパスワード: 証明書のパスワードが正しいか確認してください。間違ったパスワードを使用すると、署名処理が失敗する可能性があります。

  3. PDFファイルの存在: 署名対象のPDFファイルが指定したパスに存在するか確認してください。ファイルが存在しない場合、NullPointerExceptionが発生することがあります。

  4. 証明書の形式: 使用している証明書が正しい形式(PKCS12)であることを確認してください。また、証明書が有効であることも確認してください。

  5. 例外処理の実装: 例外が発生した場合に備えて、適切な例外処理を実装することをお勧めします。これにより、エラーの詳細を取得しやすくなります。

以下は、例外処理を追加したコードの例です:

try {
    // 文書に署名してファイルに保存する
    signature.sign(p.toAbsolutePath() + "\\tmp\\Sign.pdf", options);
} catch (GroupDocsSignatureException e) {
    System.err.println("署名中にエラーが発生しました: " + e.getMessage());
    e.printStackTrace();
}

これらの手順を試しても問題が解決しない場合は、エラーメッセージやスタックトレースをもとに、さらなる調査が必要です。特に、NullPointerExceptionが発生している箇所を特定することが重要です。

もし他に質問があれば、お気軽にお知らせください。

ライセンス、パスワード、PDFの存在、確認しました。
証明書もインポートして Acrobat Readerにてデジタル署名できることを確認しています。

あと認証局で発行した証明書でなく、
keytoolで自分で作成した証明書ならsignature.sign()で署名できることを確認しています。

すみませんが、解決策のご教授をお願いいたします。

@yoshi.sana

問題のある証明書を共有していただけますか? 当社側で問題を調査するのに役立ちます。

技術サポート様

問題のある証明書を送付いたします。

お手数おかけしますが、よろしくお願いいたします。

@yoshi.sana
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.

Issue ID(s): SIGNATUREJAVA-2883

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.

技術サポート様

証明書ファイル自体に問題があることが判明しました。
証明書ストアにインポートすることを前提作られたファイルでそのままでは利用できず、
インポートしたのちにエクスポートしたファイルでないと署名できないことが分かりました。

この投稿は解決済みとさせてください。
お手数おかけしてすみません。よろしくお願いいたします。