X.509 libraries

本文关键字:libraries | 更新日期: 2023-09-27 18:10:16

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

[v3_extensions]subjectAltName=电子邮件:foo@example.org,其他名称:pkinitSan;序列:krb_princ_name_1[krb_princ_name_1]realm=EXP:0,GeneralString:EXAMPLE.ORGprincipal_name=EXP:1,序列:krb_princ_seq_1[krb_princ_seq_1]name_type=经验:0,整数:1name_string=经验:0,序列:krb_principal_1[krb_principal_1]princ0=通用字符串:foo

在我为我所知道的语言(Perl、Python、Ruby、PHP、Bash和一些C#(找到的所有东西中,从命令行使用openssl和自动生成的.cnf文件。。。这是一个丑陋的过程有更好的方法吗(Ruby的"openssl"一开始看起来很不错,但后来我使用了PKINIT…(

X.509 libraries

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

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

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

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

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

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