首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用secp384r1elliptic曲线键和sha384哈希签名生成csr

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

Stack Overflow用户
提问于 2013-05-29 15:27:13
回答 3查看 18.1K关注 0票数 9

我使用openssl命令创建具有椭圆曲线secp384r1的CSR,并使用算法sha384签名哈希:

openssl ecparam -out ec_client_key.pem -name secp384r1 -genkey openssl req -new -key ec_client_key.pem -out ec_clientReq.pem

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

openssl req -in ec_clientReq.pem -noout -text

在CSR的签名部分,我得到了以下内容:

签名算法:ecdsa-with 1 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 384”而不是“ecdsa-with 1”?在这个过程中我遗漏了什么吗?我试图在第二个命令中使用-sha384

openssl req -new -key ec_client_key.pem -out ec_clientReq.pem -sha384

但是我在签名算法上得到了同样的结果

签名算法:ecdsa-with 1 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个字节长。第一个字节似乎是一个头部,包括类型、长度,并且可能是其他一些东西,比如填充。但我找不到确切的定义。有人能给这个放点光吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 14:28:34

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

openssl ecparam -out ec_client_key.pem -name secp384r1 -gen openssl req -config openssl.cnf -new -key ec_client_key.pem -out ec_clientReq.pem -sha384 openssl req -in ec_clientReq.pem -noout -text

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

签名算法:ecdsa-with 384

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

从更改文件中提取的内容似乎证实了这一点:

2012年3月14日1.0.0h至1.0.1之间的变化:. *)从RFC5289添加HMAC ECC密码。包括SHA384 PRF支持。按照RFC5289的要求,如果TLS的版本早于1.2,则不能使用这些密匙。史蒂夫·亨森

谢谢gtrig的帮助。

票数 5
EN

Stack Overflow用户

发布于 2013-05-30 00:05:53

当我使用与-SHA384选项相同的命令时,我在得到的CSR中得到了这样的结果:“:ecdsa- with 384”。

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

代码语言:javascript
复制
openssl list-message-digest-algorithms

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

关于你的第二个问题,格式是ASN.1。"30“表示序列如下(在本例中,它是由2个整数组成的序列)。"65“是序列中的八位数。"02“表示一个整数,30是该整数中的八进制数。如果您跳过了0x30 (小数点48)八进制,您将进入第二个整数,它被标记为"02“和"31”。第一个整数的长度是30,第二个整数的长度是31。加上每一个整数的两个八位数,就会得到65,这是序列的长度。这个页面可以告诉你更多关于ASN.1的信息。

至于这个值是一个由两个整数组成的序列,这是有意义的。ECDSA签名由2个整数组成。有关更多信息,请参见RFC6605第4节。还有一个解释如何计算两个整数的wiki页面

票数 2
EN

Stack Overflow用户

发布于 2014-10-30 21:56:23

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

包含客户端证书的示例

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

代码语言:javascript
复制
openssl ecparam -out ca.key -name secp384r1 -genkey

为ca创建自签名证书:

代码语言:javascript
复制
openssl req -x509 -new -key ca.key -out ca-ca.pem -outform pem -sha384

为客户端生成密钥:

代码语言:javascript
复制
openssl ecparam -out host1.key -name secp384r1 -genkey

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

代码语言:javascript
复制
openssl req -new -nodes -key host1.key -outform pem -out host1.req -sha384

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

代码语言:javascript
复制
openssl ca -keyfile ca.key -cert ca-ca.pem -in host1.req
  -out ca-host1-cert.pem -md sha384 -outdir .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16818014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档