【问题标题】:Programmatically generating, storing and using X.509 certificates in C#在 C# 中以编程方式生成、存储和使用 X.509 证书
【发布时间】:2012-12-16 01:33:49
【问题描述】:

我正在开发一个用 C# 编写的应用程序,我基本上需要充当我自己的证书颁发机构。数据流是这样的:

  • 最终用户生成一个公钥/私钥对,并向我发送他们的身份证明和带有公钥的某种证书请求
  • 应用验证他们的 ID
  • 验证完成后,应用会根据本地自签名根生成 X.509 证书,并将其发送给用户
  • 用户使用证书签署文件,并将文件发送到应用程序
  • 应用根据签名验证文件,并将结果存储在 SQL Server 中。

我的问题:

  • 您是否知道描述如何在不依赖外部 CA 且不调用命令行实用程序或使用 COM 对象的情况下创建和使用 X.509 证书的教程或代码示例?我查看了 X509Certificate2 类,但 MSDN 中的示例并没有显示我所追求的。
  • 是否可以使用 SQL Server 2008+ 进行一些证书处理?也许使用CREATE CERTIFICATE FROM FILEBACKUP CERTIFICATE
  • 如果使用标准 Windows 库无法完成,是否可以使用 C# Bouncy Castle 库完成?如果有,是否有一些好的代码示例?

【问题讨论】:

    标签: c# sql-server bouncycastle x509 x509certificate2


    【解决方案1】:

    带有Bouncy Castle的certgen的简洁示例

    http://netpl.blogspot.com/2012/12/how-to-create-x509certificate2.html

    我还写过关于签署和验证 xml 文档的博客

    http://netpl.blogspot.com/2012/12/interoperable-xml-digital-signatures-c_4247.html

    【讨论】:

      【解决方案2】:

      我认为您会改变对使用命令行实用程序的想法,但假设您不这样做,我没有答案,因为我还没有这样做,但这里有一些提示。

      我相信这可以通过 bouncycastle C# 库来完成。该库基本上是无证的。我要做的是首先下载一个 早期 版本的 bouncycastle Java 库,例如 1.45 版。下载早期版本的原因是因为它更接近于当前的 C# 库。从 1.47 版本开始,Java API 经历了一些根本性的变化。完全下载 Java 库的原因是因为两者的大部分功能和类都是相同的,并且 Java API 至少包含可以通过 Web 浏览器阅读的 Javadocs。在使用 C# 库进行编码时,我总是手头有库的 Javadocs、Java 源代码和 C# 源代码。我知道这听起来很可怕,但也没那么糟糕。 C# 源代码(以及 Java 源代码)非常易读且编写良好,因此可以取得进展。

      用户的证书请求应该是 PKCS10 证书请求。您应该使用一个类Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest。使用Pkcs10CertificationRequest(byte []) 构造函数来创建这个类的一个实例。此类的超类Org.BouncyCastle.Asn1.Pkcs.CertificationRequest 有一个方法GetCertificationRequestInfo,它将返回一个CertificationRequestInfo 实例。这可用于提取证书请求的片段,然后您可以使用 Wiktor 的答案创建 X509 证书。

      【讨论】:

      • 感谢您提供有关证书请求的信息。我不想使用命令行实用程序的一个原因是它们确实不适合大规模、大容量的后端处理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-04-15
      相关资源
      最近更新 更多