sql server——用c#编程地生成、存储和使用X.509证书
本文关键字:存储 证书 server 编程 sql | 更新日期: 2023-09-27 17:50:22
我正在编写一个用c#编写的应用程序,我基本上需要作为我自己的证书颁发机构。数据流是这样的:
- 最终用户生成一个公钥/私钥对,用他们的公钥向我发送他们的身份证明和某种证书请求
- 应用程序验证他们的ID
- 当验证完成时,应用程序生成一个基于本地自签名根的X.509证书,并将其发送给用户
- 用户使用证书对文件进行签名,并将文件发送给应用
- 应用根据签名验证文件,并将结果存储在SQL Server中。
我的问题:
- 您是否知道一个教程或代码示例,描述如何创建和使用如上所述的X.509证书,而不依赖于外部CA,不调用命令行实用程序或使用COM对象?我已经看过
- 是否可以使用SQL Server 2008+做一些证书处理?可能使用
CREATE CERTIFICATE FROM FILE
和BACKUP CERTIFICATE
? - 如果它不能用标准的Windows库完成,它可以用c# Bouncy Castle库完成吗?如果有,是否有一些好的代码示例?
X509Certificate2
类,但是MSDN中的示例并没有显示我所追求的内容。使用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我想你会改变使用命令行工具的想法,但假设你不这样做,我没有答案,因为我没有这样做过,但这里有一些提示。
我相信这可以用bouncycastle c#库完成。不过这个库基本上没有文档。我要做的是首先下载较早的版本的bouncycastle Java库,例如1.45版本。下载早期版本的原因是它更接近于当前的c#库。Java API在1.47版本中经历了一些根本性的变化。下载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证书。