首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >企业社会责任签约是如何运作的?

企业社会责任签约是如何运作的?
EN

Stack Overflow用户
提问于 2014-07-03 21:48:36
回答 1查看 1.4K关注 0票数 2

我试图使用企业社会责任 API以PEM格式对OpenSSL文件进行签名。

我不能使用X509_sign()方法,因为我需要使用第三方API对请求进行签名。这个API要求我的应用程序发送需要签名的数据,它将返回给我一个签名。

我需要将char*发送到第三方API,但我不明白签名过程是如何工作的:

  • 我是否只需要使用来自CSR的数据来构造这个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证书签名时实际使用了哪些请求元素,应该以何种格式提供这些数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 -textopenssl 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例程。如果这个引擎还不存在,那么仅仅为您的项目做它可能会有太多的工作,但是如果您预见到了其他(未来)的使用,它可能是值得的。

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

https://stackoverflow.com/questions/24609310

复制
相关文章

相似问题

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