十、 509个图书馆

2024-04-27 07:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个库/模块/包,用它我可以创建和签署X.509证书,并能够有条件地添加自定义v3扩展,这可能相当复杂;例如,这个bletchive开放式ssl.cnfKerberos PKINIT使用的代码段,仅用于表示foo@EXAMPLE.ORG

[v3_extensions]
    subjectAltName = email:foo@example.org,
                otherName:pkinitSan;SEQUENCE:krb_princ_name_1

[krb_princ_name_1]
    realm = EXP:0, GeneralString:EXAMPLE.ORG
    principal_name = EXP:1, SEQUENCE:krb_princ_seq_1

[krb_princ_seq_1]
    name_type = EXP:0, INTEGER:1
    name_string = EXP:0, SEQUENCE:krb_principal_1

[krb_principal_1]
    princ0 = GeneralString:foo

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


Tags: nameorgprincipalfooexamplev3seqkrb
3条回答

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

我会使用OpenSSL或一个直接的包装器,比如Ruby的OpenSSL库。在

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

事实证明,我在Ruby1.9.3的文档中添加了这些信息,该文档今天由JamesBritt发布—看看documentation for OpenSSL::X509::Certificate,它应该可以回答您所有的问题。在

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

对于更复杂的情况,例如示例中的自定义OtherName,您仍然可以使用OpenSSL::X509::Extension,不幸的是,这还没有文档记录。另一方面,这种定制扩展所需的OpenSSL::ASN1模块是documented for 1.9.3,其中提供的所有代码/建议也应适用于1.9.2。您还可以使用ASN1模块创建subjectAltName的多值版本。在

相关问题 更多 >