以编程方式在C#中生成,存储和使用X.509证书

时间:2013-01-01 09:20:04

标签: c# sql-server bouncycastle x509 x509certificate2

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

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

我的问题:

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

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

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

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

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