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

C# 在C中以编程方式生成、存储和使用X.509证书#,c#,sql-server,bouncycastle,x509,x509certificate2,C#,Sql Server,Bouncycastle,X509,X509certificate2,我正在处理一个用C#编写的应用程序,我基本上需要充当自己的证书颁发机构。数据流如下所示: 最终用户生成一个公钥/私钥对,并向我发送他们的身份证明和带有公钥的某种证书请求 应用程序验证他们的ID 验证完成后,应用程序将基于本地自签名根生成一个X.509证书,并将其发送给用户 用户使用证书对文件进行签名,并将文件发送到应用程序 应用程序根据签名验证文件,并将结果存储在SQL Server中 我的问题是: 您是否知道有教程或代码示例描述了如何创建和使用上述X.509证书,而不依赖外部CA,也不调

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

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

  • 您是否知道有教程或代码示例描述了如何创建和使用上述X.509证书,而不依赖外部CA,也不调用命令行实用程序或使用COM对象?我已经看过了
    X509Certificate2
    类,但是MSDN中的示例并没有显示我想要什么
  • 是否可以使用SQL Server 2008+执行某些证书处理?可能使用
    从文件创建证书
    备份证书
  • 如果不能用标准的Windows库实现,那么可以用C#Bouncy Castle库实现吗?如果是这样,是否有一些好的代码示例

certgen和Bouncy Castle的简明示例

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


certgen和Bouncy Castle的简明示例

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


我想您会改变使用命令行实用程序的想法,但如果您不这么做,我不知道答案,因为我还没有这么做,但这里有一些提示

我相信这可以通过bouncycastle C#library实现。但该图书馆基本上没有文档记录。我要做的是首先下载bouncycastle Java库的早期版本,例如1.45版。下载早期版本的原因是因为它更像当前的C#library。从1.47版本开始,JavaAPI经历了一些根本性的变化。下载Java库的原因是,两者的大部分功能和类都是相同的,Java API至少包含可以通过web浏览器阅读的Java文档。在使用C#library进行编码时,我手头总是有Java文档、Java源代码和库的C#源代码。我知道这听起来很可怕,但没那么糟糕。C#源代码(以及Java)可读性强,编写良好,因此可以取得进展


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

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

我相信这可以通过bouncycastle C#library实现。但该图书馆基本上没有文档记录。我要做的是首先下载bouncycastle Java库的早期版本,例如1.45版。下载早期版本的原因是因为它更像当前的C#library。从1.47版本开始,JavaAPI经历了一些根本性的变化。下载Java库的原因是,两者的大部分功能和类都是相同的,Java API至少包含可以通过web浏览器阅读的Java文档。在使用C#library进行编码时,我手头总是有Java文档、Java源代码和库的C#源代码。我知道这听起来很可怕,但没那么糟糕。C#源代码(以及Java)可读性强,编写良好,因此可以取得进展


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

感谢您提供有关证书请求的信息。我不想使用命令行实用程序的一个原因是它们确实不适合大规模、高容量的后端处理。感谢您提供有关证书请求的信息。我不想使用命令行实用程序的一个原因是它们确实不适合大规模、高容量的后端处理。