当前位置: 首页 > 知识库问答 >
问题:

使用secp384r1elliptic曲线键和sha384哈希签名生成csr

薄鸿远
2023-03-14

我正在使用openssl命令创建一个CSR,它使用椭圆曲线secp384r1和哈希算法sha384签名:

OpenSSL EC param-out EC _ client _ key . PEM-name secp 384 r 1-genkey

openssl req-new-key是ec_client_key。pem-out ec_ clientReq.pem

然后,我使用以下命令以可读格式显示CSR:

openssl req-在ec_。pem-noout-文本

在CSR的签名部分,我得到了这个:

Signature Algorithm: ecdsa-with-SHA1
    30:64:02:30:06:a1:f2:5e:1b:34:18:b9:f3:7c:e9:52:c8:78:
    99:90:63:d2:1e:d2:f5:7a:25:f3:d6:4d:6d:90:d0:bf:25:45:
    15:ad:aa:17:34:ad:1a:b9:1e:67:2b:cf:d7:a6:9b:e5:02:30:
    31:fe:76:37:4b:11:3a:e7:2d:63:52:bb:18:2f:8e:43:a7:bb:
    65:74:38:a4:92:38:9d:eb:ec:22:8f:77:f3:e4:5f:47:2d:f8:
    2a:9b:e1:2c:ba:a7:b0:e6:c2:54:8d:0e

我应该怎么做才能得到签名算法"ecdsa-with-SHA384"而不是"ecdsa-with-SHA1"?我在这个过程中是否遗漏了什么?我尝试在第二个命令中使用-sha384

OpenSSL req-new-key EC _ client _ key . PEM-out EC _ client req . PEM-sha 384

但关于签名算法我得到了同样的结果

Signature Algorithm: ecdsa-with-SHA1
    30:65:02:30:4e:b4:b6:5f:3a:fc:b7:28:e5:4b:f0:3d:9a:ea:
    4a:ba:ce:a4:f1:a6:e8:cd:15:19:23:a6:81:3f:24:01:d7:81:
    3c:9d:9a:4c:cd:4b:4a:12:6d:69:48:ec:7e:73:7d:73:02:31:
    00:d7:a5:63:9b:21:b2:95:ce:7f:13:3f:c5:1a:ac:99:01:ff:
    ba:9c:59:93:d5:ee:97:03:b5:9e:c1:7d:03:f8:72:90:65:b5:
    08:7c:79:ae:ea:4f:6e:b0:2b:55:1a:11:a5

另一个问题是关于签字的格式。在上面的示例中,一个是102字节长,第二个是103字节长。似乎第一个字节是一个标头,包括类型,长度,并且可能是其他一些内容,例如填充。但我找不到确切的定义。有人可以对此进行一些说明吗?谢谢

共有3个答案

姬阳曜
2023-03-14

为了使答案更加完整,可以提及具有ecdsa-sha384签名的非自签名证书的生成,因为它有点不同。诀窍是将“-md sha384”参数与“openssl ca”命令一起使用。

为证书颁发机构生成密钥:

openssl ecparam -out ca.key -name secp384r1 -genkey

为 ca 创建自签名证书:

openssl req -x509 -new -key ca.key -out ca-ca.pem -outform pem -sha384

为客户端生成密钥:

openssl ecparam -out host1.key -name secp384r1 -genkey

为客户端密钥创建证书请求:

openssl req -new -nodes -key host1.key -outform pem -out host1.req -sha384

响应请求为客户端创建证书:

openssl ca -keyfile ca.key -cert ca-ca.pem -in host1.req
  -out ca-host1-cert.pem -md sha384 -outdir .
杨腾
2023-03-14

当我使用与-SHA384选项相同的命令时,我在生成的CSR中得到了这个命令:“签名算法:ecdsa-with-SHA384”。

键入此命令以查看支持的摘要列表:

openssl list-message-digest-algorithms

希望您能在列表中看到SHA384。

关于第二个问题,html" target="_blank">格式是ASN.1。“30”表示后面有一个序列(在这种情况下,它是一个2个整数的序列)。“65”是序列中的八位字节数。“02”表示一个整数,30是该整数中的八位字节数。如果您提前跳过0x30(十进制中的48个)八位字节,将得到第二个整数,该整数标记为“02”和“31”。第一个整数的长度是30,第二个是31。每个整数加上两个八位字节,得到65,这是序列的长度。本页可以告诉您有关ASN.1的更多信息。

只要这个值是2个整数的序列,那就有意义了。ECDSA 签名由 2 个整数组成。有关详细信息,请参阅 RFC6605 第 4 节。还有一个wiki页面,解释了如何计算2个整数。

冯阳云
2023-03-14

这次我再次尝试使用上次的openssl版本1.0.1e(而不是0.9.8n)。

openssl ecparam-out ec_client_key。pem-名称secp384r1-gen

配置openssl.cnfec_client_key.pemec_clientReq.pem

openssl req-在ec_。pem-noout-文本

现在我得到了预期的结果:

签名算法:ecdsa-with-SHA384

看起来版本0.9.8n不支持sha384。

更改文件的摘录似乎证实了这一点:

1.0.0h和1.0.1之间的变更[2012年3月14日]:...*)添加来自RFC5289的HMAC ECC密码套件。包括SHA384 PRF支持。根据RFC5289的要求,如果TLS版本低于1.2,则不能使用这些密码套件。[史蒂夫·汉森]

感谢gtrig的帮助。

 类似资料:
  • 我有一个应用程序生成一个PDF,需要签名。 我们没有用于签署文档的证书,因为它们在HSM中,而我们可以使用证书的唯一方法是使用WebService。 这是我们的代码,首先,我们得到签名外观,并计算散列 在这一点上,我们得到一个已签名的PDF,但签名无效。Adobe称“文档自签署以来已被更改或损坏”。 我已经通过使用外部服务和iText,PDF签名iText pkcs7多签名和是否可能签署一个PDF

  • 我试图用ECDSA和secp256r1曲线(P256)和SHA256算法来生成签名。我也在使用弹力城堡图书馆。下面的代码,

  • 我可以通过外部签名使用itextpdf库对文档进行签名。 但问题是,最终用户不想发送他的文档,因为它可能包含任何敏感数据。因此,我要求最终用户给出文档哈希,以便与外部服务签署哈希,并将签署后的哈希发回。 但是,问题来了,当他们试图使用itextpdf()用给定的签名散列对文档进行签名时,PDF文档被签名了。但在验证签名时,表明签名是无效的。 因此,问题的发生是因为每次使用(itextpdf库)打开

  • 我正在开发一款Android应用程序。在我的应用程序中,我集成了Facebook登录。我的facebook登录工作正常。但当我制作release apk并运行该应用程序并尝试登录Facebook时,它就不工作了。请看下面我的场景。 我生成如下的发布apk 然后我使用jks文件路径生成keyhash。 我得到了一个散列键,然后将其添加到开发人员配置文件设置中。 当我在我的设备上安装并运行apk并使用

  • 我正在使用iText7执行PDF和签名操作。我的场景是,我在本地机器上计算哈希,并将这个哈希发送到签名服务器,作为响应,得到签名的PKCS1(原始签名),然后我将这个签名嵌入到PDF中。我的代码片段如下: 1:从智能卡设备读取公共证书。 3:初始化PdfSigner并设置签名外观: 4:我已经实现了IExternalSignatureContainer接口来获取文档哈希: 5:获取文档哈希: 7:

  • 我正在尝试通过签名服务签署一个pdf文件。这个服务需要发送一个十六进制编码的SHA256摘要,作为回报,我会收到一个十六进制编码的SignatureValue。此外,我还收到了签名证书、中间证书、OCSP响应和TimeStampToken。但是,我在尝试使用SignatureValue对pdf进行签名时已经陷入了困境。 我读过布鲁诺的白皮书,过度浏览互联网,尝试了很多不同的方式,但签名不断出现无效