【问题标题】:X.509 libraries [closed]X.509 库 [关闭]
【发布时间】:2011-11-30 04:02:51
【问题描述】:

我正在寻找一个库/模块/包,我可以使用它创建和签署 X.509 证书,并能够有条件地添加自定义 v3 扩展——这可能相当复杂;比如这个被 Kerberos PKINIT 使用的 bletchful OpenSSL.cnf sn-p,只是为了代表foo@EXAMPLE.ORG

[v3_extensions] subjectAltName = 电子邮件:foo@example.org, 其他名称:pkinitSan;序列:krb_princ_name_1 [krb_princ_name_1] 领域 = EXP:0, GeneralString:EXAMPLE.ORG principal_name = EXP:1, SEQUENCE:krb_princ_seq_1 [krb_princ_seq_1] name_type = 经验:0,整数:1 name_string = EXP:0, SEQUENCE:krb_principal_1 [krb_principal_1] princ0 = GeneralString:foo

在我所知道的所有语言(如 Perl、Python、Ruby、PHP、Bash 和一些 C#)中,使用自动生成的 .cnf 文件的命令行中的openssl...丑陋的过程。 有更好的方法吗?(Ruby 的“openssl”起初看起来很不错,但后来我开始使用 PKINIT...)

【问题讨论】:

  • 您想以编程方式创建证书(即您根据需要编写代码来创建证书),或者您只是想以某种方式创建证书并稍后在您的代码中使用它们?
  • @user:前者。这是我的小型仅供内部使用的证书颁发机构,我需要为各种服务颁发真正的 X.509 证书。
  • 阅读有关 DigiNotar 的信息,然后决定您是否真的要沿着这条路继续前进。运行您自己的 CA 不仅仅是代码。
  • @wberry:我阅读过有关 DigiNotar 的信息。就像我说的,CA 仅供内部使用。 (对于不到 10 台私有机器,其中大多数共享相同的 2-4 个受信任用户,并且托管绝对不重要。)我遭受同样命运的概率非常很小。我在学习 X.509、PKI、PKINIT 等方面获得的经验?值得。

标签: c# python ruby perl x509


【解决方案1】:

事实证明,我在 James Britt 今天刚刚发布的 Ruby 1.9.3 文档中准确添加了这些信息 - 看看 documentation for OpenSSL::X509::Certificate,它应该会回答你所有的问题。

如果 OpenSSL 本身支持特定扩展,则修改示例以生成示例中列出的特定扩展应该很简单。

对于更复杂的情况,例如在您的示例中自定义 OtherName,您仍然可以使用 OpenSSL::X509::Extension,不幸的是,它尚未记录。另一方面,此类自定义扩展所需的 OpenSSL::ASN1 模块是documented for 1.9.3,并且那里提供的所有代码/建议也应该适用于 1.9.2。您还可以使用 ASN1 模块来创建 subjectAltName 的多值版本。

【讨论】:

  • 谢谢,我会在 1.9.3 发布后立即尝试。我假设我必须使用 OpenSSL::ASN1 进行此类扩展? (在相关说明中,OpenSSL::X509::Extension 似乎没有一种明显的方法来创建多值扩展;例如,单个 subjectAltName 中有两个名称。)
  • 它已经使用 1.9.2 工作 - 它只是最近添加的文档。你可以马上试试。我会更新以包含有关扩展的更多信息。
【解决方案2】:

我会使用 OpenSSL 或像 Ruby 的 openssl 库这样的库的直接包装器。

OpenSSL 是一个非常强大且值得信赖的工具包——它还有一个额外的优势,即您可以从任何脚本语言中以相同的方式调用它。使用 OpenSSL 命令行工具,您可以与命令行交互以帮助调试脚本;您还可以使用相同的 CA 在脚本之外手动生成证书。

【讨论】:

  • openssl 命令行工具的问题是他们希望所有证书都使用相同的模板。例如,您不能仅使用单个命令颁发具有三个 subjectAltNames 的证书和仅具有一个但不同的 keyUsages 的证书。
  • 我以前做过,对我来说效果很好。
【解决方案3】:

我们的SecureBlackbox 允许您在 C# 中创建和管理 X.509 证书,并允许您添加自定义扩展。我相信BouncyCastle 也可以做到这一点。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多