我试图使用企业社会责任 API以PEM格式对OpenSSL文件进行签名。
我不能使用X509_sign()方法,因为我需要使用第三方API对请求进行签名。这个API要求我的应用程序发送需要签名的数据,它将返回给我一个签名。
我需要将char*发送到第三方API,但我不明白签名过程是如何工作的:
char*,例如,公钥的主题、指数和模数:
Char* = "DN=test,O=something...123456(this is the exponent)a2:43:65(this is the modulus)...-text中使用OpenSSL命令时出现的所有元素来构建缓冲区:
Certificate: Data: Subject: dn=test, O=something Public key info: Exponent: 123456 Modulus: A2:43:65 ....总结一下: CA在执行X509证书签名时实际使用了哪些请求元素,应该以何种格式提供这些数据?
发布于 2014-07-04 11:12:55
您的标题和主体不一致;openssl签署的是证书,而不是CSR。企业社会责任不是证书,证书不是企业社会责任,颁发证书并不像许多不知情或懒惰的人所说的那样是“签署企业社会责任”。(正常)CSR实际上是由请求者签名的,而不是CA。openssl使用X509_REQ类型作为CSR,X509_REQ_sign为CSR签名。
但答案基本上一样。X.509证书或PKCS#10 CSR由三种内容组成:包含要签名的数据的主体、AlgorithmIdentifier和签名(作为BITSTRING)。它们使用一定义,并使用区分编码规则或DER进行编码。您输入或看到的由openssl req -text或openssl x509 -text或其他程序显示的文本表单表示相同的数据,但通常不足以再现确切的位数,而且您必须拥有数字签名才能工作的确切位。(这就是DER中的“区分”的含义;它通过指定用于某些不明确情况的确切八位数和位来修改基本编码规则或BER。)对于CSR,请参阅我在https://security.stackexchange.com/questions/58717/what-part-of-the-csr-is-hashed-in-order-to-create-its-signature/58735中的答案;对于cert,“包装器”是相同的,但主体非常不同,包含的内容比DN和公钥多得多。
TL;DR For X509* cert您签署了cert->cert_info的DER-编码,该编码具有X509_CINF类型,可以使用i2d_X509_CINF()进行编码。对于X509_REQ* csr,您可以使用X509_REQ_INFO类型使用i2d_X509_REQ_INFO()对csr->req_info的DER编码进行签名。
Alternative: openssl有engine的概念,它是一个处理某些加密操作的外部库和/或硬件单元。如果您的第三方API是或可以“包装”为openssl引擎,则可以通过配置和指定该引擎来使用(几乎所有)正常的openssl例程。如果这个引擎还不存在,那么仅仅为您的项目做它可能会有太多的工作,但是如果您预见到了其他(未来)的使用,它可能是值得的。
https://stackoverflow.com/questions/24609310
复制相似问题