0

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

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

我的问题:

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

2 回答 2

3

certgen 与 Bouncy Castle 的简明示例

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

于 2013-01-01T12:01:20.087 回答
1

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

我相信这可以通过 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 证书。

于 2013-01-02T15:09:23.837 回答