繁体   English   中英

通过X509Certificate加载时,私钥证书不支持数字签名

[英]Private key certificate does not support digital signature when loaded via X509Certificate

最近,我面临着与Java Web服务交换SOAP消息的需求,在Java Web Service中,必须进行数字签名的消息才能进行通信。 正如预期的那样,此过程是用私钥签名的消息,以便对方站点可以通过公用站点等对其进行验证。这次唯一的区别是,对方是管理局本身。

我最初使用以下命令创建证书请求

openssl req -new -newkey rsa:1024 -keyout myprivatekey.pem  -out myrequest.pem 

上面的命令创建私钥和我的证书请求。 之后,我( 通过他们的站点 )向他们发送证书请求“ myrequest.pem”,以便他们授权证书并创建最终( 有效 )证书。 当我收到答案时( 例如,授权证书“ complete.pem” ),以及先前生成的myprivatekey.pem,我创建了.pfx私钥,应准备立即使用。

openssl pkcs12 -export -out myprivatekey.pfx -in complete.pem -inkey myprivatekey.pem -name "testcertificate"

上面创建了myprivatekey.pfx,我已针对证书成功进行了验证。 当我尝试使用以下代码通过Studio 2005和WSE 3.0签名消息时,问题就开始了:

X509Certificate2 cert = new X509Certificate2(path,"pass");
X509SecurityToken certToken = new X509SecurityToken(cert);

certToken的SupportsDigitalSignature属性设置为false,因此我无法签名消息,因此无法继续。 请注意,带有我自己发行并加载到X509SecurityToken中的自签名证书和私钥的相同过程似乎支持数字签名( 属性为true )。

我想这与我从他们那里获得的最终授权证书有关,但是我开始怀疑自己做错了什么。

有什么想法要检查吗?

将证书安装到Windows证书存储中(在资源管理器中双击PFX文件)。 然后转到Internet Explorer中的“ Internet设置”对话框,然后在“目录”选项卡上找到“证书”按钮。 在打开的对话框中,找到已安装的证书并浏览其详细信息。 检查密钥用法字段。 它必须包含数字签名(或类似的词)。

更新:正如我在下面的评论中提到的那样,如果是由另一方生成证书,则可以询问他们的软件在处理您的请求时是否正确设置了“密钥用法”扩展。 通常,设置密钥使用是CA的工作,因为它们授权您出于某些目的使用此证书。

您的证书可能不包含数字签名作为有效的密钥用法。 您可以使用以下命令进行检查:

openssl x509 -in complete.pem -purpose

当您使用-x509开关生成自签名证书时,会“请求”不同的默认扩展名。 检查您的配置文件中的OpenSSL ,尤其是req_extensions和x509_extensions部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM