首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CSR生成Keytool对象

从CSR生成Keytool对象
EN

Security用户
提问于 2013-07-22 14:08:44
回答 1查看 534关注 0票数 1

我必须开发一个使用另一个应用程序来生成CSR的应用程序。在生成CSR之后,我必须提供这个CSR以及CA的公钥的SHA256散列。问题在于生成CSR的应用程序不生成散列。

如何生成哈希码?

我可以使用这个特定的CSR创建一个keystore对象,然后从其中提取散列吗?

或者有人能提出其他的方法吗?

还是不可能从现有的CSR生成keystore对象?

EN

回答 1

Security用户

回答已采纳

发布于 2013-07-22 15:33:16

我想CSR是指一个证书请求。证书请求是指将证书发送给证书颁发机构,以便CA可以将其转换为证书。请求应包含CA所需的所有内容,即CA无法自行推断或生成的所有内容。

证书的一个关键部分是公钥。在PKI中,密钥对生成的两个常见位置位于请求者或CA上:请求者生成自己的密钥对并将公共部分作为请求的一部分发送给CA,或者CA生成密钥对并将私钥连同证书一起发送给请求者。我假设您是指前者:您的"CSR生成工具“实际上生成了一对密钥,并将公钥放在证书请求中。

证书请求有几种标准格式。一种非常常见的格式是PKCS#10。如果您的问题确实涉及到包含要提取的公钥的PKCS#10请求,那么“只是”将公钥定位到一组字节中。PKCS#10使用ASN.1,其结构在RFC中定义:

代码语言:javascript
复制
CertificationRequest ::= SEQUENCE {
     certificationRequestInfo CertificationRequestInfo,
     signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
     signature          BIT STRING
}

CertificationRequestInfo ::= SEQUENCE {
     version       INTEGER { v1(0) } (v1,...),
     subject       Name,
     subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
     attributes    [0] Attributes{{ CRIAttributes }}
}

SubjectPublicKeyInfo { ALGORITHM : IOSet} ::= SEQUENCE {
     algorithm        AlgorithmIdentifier {{IOSet}},
     subjectPublicKey BIT STRING
}

因此,PKCS#10请求是一个SEQUENCE,其第一个字段是CertificateRequestInfo结构,另一个SEQUENCE是第三个字段是SubjectPublicKeyInfo,它包含您要查找的公钥。THe公钥由密钥类型的标识符和编码的密钥值本身组成。

你现在的任务是解码。使用自定义代码解析ASN.1/DER是可行的,但需要小心。你最好使用一些现有的图书馆,它将为你做所有的艰苦工作。OpenSSL可以提供帮助;查看其用于解码的PEM_read_bio_X509_REQ()函数,然后是X509_REQ_get_pubkey() (尽管必须说OpenSSL文档可能有点令人望而生畏)。

重要的一点是,公钥是几个数学对象的集合,而哈希函数则接受一个位序列作为输入。因此,为了散列公钥,必须进行某种编码,如果要计算正确的哈希值,则必须按照情况所需的方式对密钥进行编码(您说“必须提供.公钥的SHA256哈希”:我认为您有某种形式要求,它用所有所需的清晰度描述了确切的格式)。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/39333

复制
相关文章

相似问题

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