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

时间:2010-11-11 11:10:35

标签: c# .net security openssl x509certificate

最近,我面临着与Java Web服务交换SOAP消息的需求,其中数字签名消息是通信所必需的。正如预期的那样,进程使用私钥对消息进行签名,以便对方站点使用公共e.t.c验证它。这次唯一的区别是权威本身就是相反的。

我最初使用以下命令

创建证书请求
openssl req -new -newkey rsa:1024 -keyout myprivatekey.pem  -out myrequest.pem 

上面的命令会创建私钥和我的证书请求。然后,我将它们(通过他们的网站)发送给证书请求“myrequest.pem”,以便他们授权证书并创建最终的(和有效的)证书。当我收到我的答案时,(让我们说授权证书“complete.pem”),以及之前生成的myprivatekey.pem我创建了.pfx私钥,应该可以立即使用。< / p>

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中加载的私钥的相同过程似乎支持数字签名(属性为真)。

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

任何想法要检查什么?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

openssl x509 -in complete.pem -purpose

答案 2 :(得分:0)

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