【问题标题】:Private key certificate does not support digital signature when loaded via X509Certificate通过 X509Certificate 加载私钥证书不支持数字签名
【发布时间】:2011-05-08 09:57:10
【问题描述】:

最近,我需要与 Java Web 服务交换 SOAP 消息,其中数字签名消息对于通信是必需的。正如预期的那样,该过程是使用私钥对消息进行签名,以便对方站点使用公共密钥等对其进行验证。这次唯一不同的是,对面的是权威本身。

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

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 中的自签名证书和私钥的相同过程似乎支持数字签名(property is true)。

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

有什么要检查的想法吗?

【问题讨论】:

    标签: c# .net security openssl x509certificate


    【解决方案1】:

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

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

    【讨论】:

    • 这个讨论对我也很有用。当我使用 PFXImportCertStore 导入第三方 CA 颁发的 PFX 时,密钥会自动映射到 AT_KEYEXCHANGE 而不是 AT_SIGNATURE-,但是证书的密钥用法表明它是用于数字签名、密钥加密等,您是否克服了任何此类问题?为什么会出现这种奇怪现象?如何从 AT_KEYEXCHANGE 重新映射到 AT_SIGNATURE?谢谢
    【解决方案2】:

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

    openssl x509 -in complete.pem -purpose
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 在 OP 的情况下,证书颁发机构创建证书,CA 有责任正确设置密钥使用扩展。他们很可能不这样做(并且只是从请求中复制扩展),并且请求根本不包括密钥用法。
      • @Eugene - 当 CA 有系统时,当您向他们提交单个文件请求时,该请求指示您想要哪些用法/扩展的机制。
      • 没有。您提交 PKCS#10 请求,其中可能包含扩展。但是,如果您将请求发送到 CA,CA 将决定要设置的密钥用法。要检查吗?创建一个 SSL 请求并尝试使用此请求从任何 CA 订购代码签名证书。
      • 感谢您的回答。正如 Damien 所说,我的配置文件缺少所需的扩展名,所以我发布了一个正确用法的文件;但是当局(再次)颁发了没有所需密钥用法的证书,所以我想这毕竟是他们的错(正如 Eugene 声称的那样)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2018-07-19
      • 2016-02-17
      • 1970-01-01
      • 2015-12-23
      • 2023-03-19
      相关资源
      最近更新 更多