我必须开发一个使用另一个应用程序来生成CSR的应用程序。在生成CSR之后,我必须提供这个CSR以及CA的公钥的SHA256散列。问题在于生成CSR的应用程序不生成散列。
如何生成哈希码?
我可以使用这个特定的CSR创建一个keystore对象,然后从其中提取散列吗?
或者有人能提出其他的方法吗?
还是不可能从现有的CSR生成keystore对象?
发布于 2013-07-22 15:33:16
我想CSR是指一个证书请求。证书请求是指将证书发送给证书颁发机构,以便CA可以将其转换为证书。请求应包含CA所需的所有内容,即CA无法自行推断或生成的所有内容。
证书的一个关键部分是公钥。在PKI中,密钥对生成的两个常见位置位于请求者或CA上:请求者生成自己的密钥对并将公共部分作为请求的一部分发送给CA,或者CA生成密钥对并将私钥连同证书一起发送给请求者。我假设您是指前者:您的"CSR生成工具“实际上生成了一对密钥,并将公钥放在证书请求中。
证书请求有几种标准格式。一种非常常见的格式是PKCS#10。如果您的问题确实涉及到包含要提取的公钥的PKCS#10请求,那么“只是”将公钥定位到一组字节中。PKCS#10使用ASN.1,其结构在RFC中定义:
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哈希”:我认为您有某种形式要求,它用所有所需的清晰度描述了确切的格式)。
https://security.stackexchange.com/questions/39333
复制相似问题