Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iText:在服务器上实现PDF文件的数字签名时遇到密码问题_Java_Pdf_Itext_Keystore_Pkcs#12 - Fatal编程技术网

Java iText:在服务器上实现PDF文件的数字签名时遇到密码问题

Java iText:在服务器上实现PDF文件的数字签名时遇到密码问题,java,pdf,itext,keystore,pkcs#12,Java,Pdf,Itext,Keystore,Pkcs#12,iText的新用户试图从中的示例3.1和示例3.2中获得改编的示例代码 我在下面提供了代码片段供参考 我让托管提供商从GlobalSign证书创建了一个.pfx文件(他们不提供.p12文件)。他们发布了以下linux命令: # openssl pkcs12 -export -out cert.pfx -inkey www.mydomain.com.key -in ../certs/www.mydomain.com.crt -certfile ../certs/ca-bundle.crt

iText的新用户试图从中的示例3.1和示例3.2中获得改编的示例代码

我在下面提供了代码片段供参考

我让托管提供商从GlobalSign证书创建了一个
.pfx
文件(他们不提供
.p12
文件)。他们发布了以下linux命令:

# openssl pkcs12 -export -out cert.pfx -inkey www.mydomain.com.key 
  -in ../certs/www.mydomain.com.crt -certfile ../certs/ca-bundle.crt
其中,
ca bundle.crt
来自GlobalSign。为了获得
.p12
,我只是将
.pfx
文件复制到一个扩展名为
.p12
的新文件中。从我在网上看到的情况来看,人们以前做过这件事(与iText无关)并取得了成功,因为
.pfx
文件和
.p12
文件是二进制等价物

要进行验证,可以在linux提示符下键入:

openssl pkcs12 -info -in /path/to/file/cert.pfx
然后它要求输入密码,但没有,所以只需按enter键,然后它要求输入我输入的私人密码短语(例如,
myPrivateCertPassword
),然后它显示我的私人证书、GlobalSign的公共证书和我的私钥

这就是我困惑的地方。没有导入密码,因此我在iText中尝试了以下尝试(如下面的代码段所示):

两者都不起作用。第一个给出了一个运行时错误:

java.io.IOException: PKCS12 key store mac invalid - wrong password or corrupted file.
java.lang.NoClassDefFoundError : org/bouncycastle/cert/X509CertificateHolder 
 java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size
第二个给出了运行时错误:

java.io.IOException: PKCS12 key store mac invalid - wrong password or corrupted file.
java.lang.NoClassDefFoundError : org/bouncycastle/cert/X509CertificateHolder 
 java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size
有什么想法吗

ks.load()
代码行中使用的密码确切地说来自哪里(GlobalSign?服务器托管公司?我?)。当我发出上述导出命令时,这是否称为导出键

提前感谢您的评论

--------下面是代码片段---------

在main()中:

外干管():

但这会产生一个新的运行时错误:

java.io.IOException: PKCS12 key store mac invalid - wrong password or corrupted file.
java.lang.NoClassDefFoundError : org/bouncycastle/cert/X509CertificateHolder 
 java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size
我越来越近了吗

更新2:

我根据Bruno的评论安装了JCE,现在出现以下错误:

java.lang.NoClassDefFoundError : org/bouncycastle/tsp/TimeStampTokenInfo
更新3:

通过将bcpkix-jdk15on-149.jar从www.bounchycastle.org添加到/lib目录,并将以下内容添加到java程序中,我能够清除上述错误:

import org.bouncycastle.jce.provider.BouncyCastleProvider; // this was already there
import org.bouncycastle.tsp.TimeStampTokenInfo; // this is new and fixed the above error
现在我可以看到数字签名了

更新4:

对于那些感兴趣的人,请参阅我的后续帖子:

关于BouncyCastle错误:您使用的是哪个版本的BC?关于非法密钥大小:密钥大小是多少?密钥使用是否允许数字签名?(并非所有人都这么做。)最后,您是否安装了额外的JCE(标准SDK不允许您使用长密钥大小)。Thaks Bruno,我使用的是BouncyCastle bcprov-jdk15on-149.jar(最新版本)。我必须检查密钥大小,以及它是否允许数字签名。而且,我还没有安装任何额外的JCE——您指的是
Java加密扩展(JCE)无限强度权限策略文件7
?(如果是这样,我还没有安装,我需要吗?)JCE基本上就是罪魁祸首。见上文更新2和3。布鲁诺,非常感谢。顺便说一句,优秀的文档。这真的帮了大忙。如果你提交你的评论作为回答,我会接受。我正在写一本新的(免费的)电子书。结果,我不再像以前那样活跃了。感谢您更新问题,感谢您主动提出接受答案,如果我写一个,但更重要的是:我很高兴您能够解决问题。