最近,我面临着与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私钥,该私钥应该可以立即使用。
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);SupportsDigitalSignature属性的certToken设置为false,因此我无法对消息签名,因此不能继续。请注意,与我自己颁发并在X509SecurityToken中加载的自签名证书和私钥相同的过程似乎支持数字签名(属性为true)。
我想这与我从他们那里得到的最终授权证书有关,但我开始怀疑我做错了什么。
有什么好查的吗?
发布于 2010-11-11 12:34:18
将证书安装到Windows证书存储区(双击资源管理器中的PFX文件)。然后转到Internet中的Internet设置对话框,并在Content选项卡上找到“证书”按钮。在打开的对话框中,找到已安装的证书并浏览它的详细信息。检查密钥使用字段。它必须包括数字签名(或类似的词)。
更新:正如我在下面的评论中提到的,如果生成证书的是对方,您可以问他们在处理您的请求时,他们的软件是否正确地设置了密钥使用扩展。通常CA的职责是设置密钥使用,因为它们授权您将此证书用于特定目的。
发布于 2010-11-11 12:36:13
可能您的证书不包括数字签名作为有效的密钥使用。您可以使用以下命令来检查它:
openssl x509 -in complete.pem -purpose发布于 2010-11-11 14:48:30
使用-x509开关生成自签名证书时,将“请求”不同的默认扩展。查看您的OpenSSL配置文件,特别是req_extensions和x509_extensions部分。
https://stackoverflow.com/questions/4153769
复制相似问题