为有中文需求的客户提供多渠道中文技术支持.

Fri Dec 23, 2022 3:22 am

想使用pdf数字签名,已经通过openssl生成了pfx文件,密码也是正确的。但是在java代码中运行会报错。
Code: Select all
String pdfPath = "target/test-classes/Input.pdf";
String pfxCertPath = "target/test-classes/server.pfx";
String pfxCertPasswd = "1234";
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.loadFromFile(pdfPath);
//加载pfx证书,及证书秘钥
PdfCertificate cert = new PdfCertificate(pfxCertPath,pfxCertPasswd);

报错信息如下:
Code: Select all
java.lang.NullPointerException: Cannot invoke "com.spire.pdf.packages.spreyb.spr  (int)" because the return value of "com.spire.pdf.packages.spreyb.spr  (int, byte)" is null
   at com.spire.pdf.packages.sprwxb.spr (clc:127)
   at com.spire.pdf.packages.sprwxb.<init>(clc:0)
   at com.spire.ms.System.Security.Cryptography.X509Certificates.X509Certificate.spr  (clc:4)
   at com.spire.ms.System.Security.Cryptography.X509Certificates.X509Certificate2.spr  (oic:399)
   at com.spire.ms.System.Security.Cryptography.X509Certificates.X509Certificate2.spr  (oic:427)
   at com.spire.ms.System.Security.Cryptography.X509Certificates.X509Certificate2.<init>(oic:149)
   at com.spire.pdf.security.PdfCertificate.<init>(Unknown Source)

盼复 :cry:

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Fri Dec 23, 2022 6:01 am

您好,

为了精确调查您的问题,可以麻烦您提供以下信息吗?您可以附加在该帖中或者通过邮件([email protected])发送给我们。
1)您的测试pdf文件和pfx文件
2)您的完整测试代码
3)您使用的Spire.PDF版本或者Spire.Office版本

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Fri Dec 23, 2022 6:54 am

附件为测试代码、pfx文件和pdf文件,pfx文件密码为1234。
我使用的是spire.pdf.free 5.1.0,我也试过spire.office.free 5.2.0,但都是同样的问题:Cannot invoke "com.spire.pdf.packages.spreyb.spr (int)" because the return value of "com.spire.pdf.packages.spreyb.spr (int, byte)" is null。
我在怀疑是不是密码有误,但是使用密码确实可以打开pfx文件,没有头绪。
我使用的java框架是SpringBoot 2.6.11,在此之前使用普通的maven框架依然会出现这个问题。

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Fri Dec 23, 2022 8:19 am

您好,

根据你的代码和测试文件,我复现了你的问题。我查询了我们的bug追踪系统,猜测可能是您签名的加密方式不受支持,由于使用您提供的密码无法打开签名文件,所以我无法得知您的签名算法,我使用了您提供的代码和签名算法为sha1RSA的签名文件进行测试,发现正常执行,我们建议您更换签名算法为sha1RSA。如果您更换签名算法之后还是有问题,你可以随时联系我们。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Fri Dec 23, 2022 8:56 am

原来如此,请问java可以生成sha1RSA签名文件吗?可以提供参考代码吗?我是在openssl生成的,算法是sha256rsa。

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Fri Dec 23, 2022 10:09 am

您好,

我们的产品不支持生成证书文件这个功能,无法给您提供相应的参考代码。如果您还有其他问题,您可以随时咨询我们。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Fri Dec 23, 2022 11:30 am

可以提供一下您测试时使用的pfx文件和密码吗?我暂时无法生成 :cry:

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Fri Dec 23, 2022 12:09 pm

我试了一下生成sha1rsa签名算法的pfx文件,但还是报同样的错误。 :cry: 是我生成的方式不对吗
生成证书.png

依然报错.png

压缩包是我生成的密钥和证书文件

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Mon Dec 26, 2022 2:26 am

您好,

感谢您的反馈。
第一个问题,测试使用的gary.pfx文件和密码我已经放在附件中。
第二个问题,我使用您提供的pfx文件进行测试,程序会报空指针异常,使用您代码里的密码131110,无法打开该证书文件。我使用和您一样的生成代码,生成了三个文件,然后使用您提供的代码进行测试,程序正常执行,没有抛出异常,生成文件和其他详情见附件。您可以尝试使用我提供的两个证书文件进行测试,如果还有问题,您可以随时联系我们。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Mon Dec 26, 2022 4:17 am

你好,感谢你的回复!我想我已经找到问题所在了。密码错误确实是一个点,但正确的密码也同样会报这个错误,这个我也试过了多次。
周末我找了一位朋友帮我,他自己生成了pfx文件,使用我的代码是可以运行的。我使用跟他一样的openssl命令生成出来的pfx文件,使用同样的代码运行却还是会报错(用他生成的pfx文件在我的机器上运行也是正常的)。
然后我降低了openssl的版本到1.1.1s,使用同样的命令生成出来的pfx文件就可以正常签名了。我原本使用的是openssl3.0.7。
或许是spire不支持高版本的openssl生成出来的pfx文件?

1pipi_nah
 
Posts: 6
Joined: Fri Dec 23, 2022 3:16 am

Mon Dec 26, 2022 10:26 am

您好,

感谢您的反馈,我使用了openssl 3.0.7生成了pfx文件,使用密码打开的时候提示密码错误,同时我使用该pfx文件在项目里进行了测试,同样报错空指针异常。目前不清楚是高版本的openssl的问题还是我们产品不支持,我已经建立一个调查任务给开发人员,编号:SPIREPDF-5695,他们会去调查我们的产品是否支持高版本的openssl生成的pfx证书文件,目前建议您使用低版本的openssl。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Return to 中文技术支持