【问题标题】:Save a SecKeyRef Asymmetric Key Pair to disk as a Certificate将 SecKeyRef 非对称密钥对作为证书保存到磁盘
【发布时间】:2011-11-24 08:25:51
【问题描述】:

我通过 SecKeyGeneratePair 创建了两个 SecKeyRef 项,但现在我想将公钥转换为 x509 数字证书 - 和/或将公钥和私钥都转换为 PKCS #12 (.p12) 证书 - 并保存它作为文件存储到磁盘。这样我就可以用它做任何我需要做的事情,包括将证书发送到其他服务或计算机。

我宁愿不使用钥匙串,但即便如此,我还是很难找到关于如何从一对 SecKeyRefs 中创建证书并将它们写成证书文件的好文档。

【问题讨论】:

  • 我刚刚意识到我一直在调用的 SecKeyGeneratePair() 命令似乎正在自动将我的新密钥存储在钥匙串中。我认为这种认识可能刚刚为在这里找到解决方案打开了很多大门。

标签: objective-c macos x509certificate pki security-framework


【解决方案1】:

你想要Security Transforms Programming Guide。它涵盖了您对此所需的大部分内容。某些部分(如SecItemExport)未记录在参考文档中,仅记录在公共头文件中。但是SecItemExport 是处理这些东西的新的 10.7 方式。

【讨论】:

  • 使用SecItemExportSecExternalFormatkSecFormatX509Cert,但这似乎不适用于仅使用SecKeyRef。您将收到错误 SecItemExport failed (osrr=-50),其定义为:errSecParam = -50, /* One or more parameters passed to a function were not valid. */
  • SecKeyRef 信息不足以生成 X509 证书。我假设你需要一个 kSecFormatPEMSequence ,传递两个键的数组。
  • 好的,所以有效地将两个键转换为 PEM 序列。但是,我该如何进入创建数字证书的下一步呢?还是 X.509 证书?还是 PKCS #12 证书?我也许可以不用这些格式,但由于这些是标准格式,似乎应该有办法。
  • X.509 证书不仅仅是存储非对称密钥的“标准格式”。它对信任和适用性有很多意义。除非你想要所有这些,否则不要使用证书。 PKCS#12 不是证书。这是一种将证书和密钥附加到文件中的方法。 PEM 编码数据的串联列表是存储密钥的标准方式。
  • 感谢 Rob 帮助清除这一切。我主要是在谈论 X.509 的最基本形式,一种文件/数据格式,而不是作为证书颁发机构 PKI 的一部分的更大角色。我打算使用自签名 X.509 作为使用现有标准的一种方式,而不必重新发明轮子,但我相信你是对的,PEM 列表可能更适合我的情况。同样,您是对的,我将 PKCS#12 称为证书是不正确的,我再次只是试图将其称为我可以使用的加密文件格式或标准;在这样做时,我把它贴错了证书。
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
相关资源
最近更新 更多