当前位置: 首页 > 编程语言 > C#

C#学习教程:.Net以编程方式与Bouncy Castle签署PKCS#10请求分享

时间:2023-04-10 21:18:53 C#

C#学习教程:.Net以编程方式使用BouncyCastle签署PKCS#10请求现在我们需要对其进行签名并将结果返回给客户端,CertEnroll将在客户端处理本地证书存储的内容。这是一个B2B应用程序,根签名证书将自行生成,或者我们可以使用我们现有的ThawteSSL证书。服务器(2008)未运行ActiveDirectory,除非绝对必要,否则我们不想为此创建单独的签名基础结构/服务。无需撤消等-我们希望以编程方式执行此操作。我很想使用BouncyCastle库,但C#库缺少任何有意义的文档,而原始Java文档无疑是相似的,而C#实现的不同让我更加困惑。有谁知道(或拥有)示例C#(或VB)代码或已知的相关链接,使用BouncyCastle或本机.Net类?任何帮助完成这项工作将不胜感激!至少可以说这是一个有趣的练习:-)我们使用了BouncyCastle和.Net证书对象。还是有很多解决办法的!有改进的余地,但它确实有效。其核心(CertGen)如下。当我们到达这里时,CSR已经在客户端生成,当我们离开时,生成的证书由客户端代码安装(请参阅此博客以了解客户端的工作原理。)再次强调,我不会将此作为完成提供产品,但希望对那些面临同样任务的人有一定的价值。HappyEncryption:-)以上是C#学习教程:.NetprogrammaticallysigningPKCS#10requestwithBouncyCastle分享全部内容,如果对大家有用需要进一步了解C#学习教程希望大家更多关注—//2012年7月10日,请参阅//http://social.technet.microsoft.com/Forums/en-NZ/winserversecurity/thread/45781b46-3eb7-4715-b877-883bf0dc2ae7//instaedofCX509CertificateRequestPkcs10csr=新CX509CertificatePkcs10csr=新CX509CertificatePkcs10();使用:IX509CertificateRequestPkcs10csr=(IX509CertificateRequestPkcs10)Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestPkcs10"));csr.InitializeDecode(csrText,EncodingType.XCN_CRYPT_STRING_BASE64);csr.CheckSignature(Pkcs10AllowedSignatureTypes.AllowedKeySignature);//获取BouncyCSRInfo对象Trace.Write("获取BouncyCSRInfo对象");字节[]csrBytes=Convert.FromBase64String(csrText);CertificationRequestInfocsrInfo=CertificateTools.GetCsrInfo(csrBytes);certTrace.Write("已签名证书的公钥");非对称密钥参数publicKey=PublicKeyFactory.CreateKey(pki);//构建Version1(无扩展)证书DateTimestartDate=DateTime.Now;DateTimeexpiryDate=startDate.AddYears(100);BigIntegerserialNumber=newBigInteger(32,newRandom());Trace.Write("构建版本1(无扩展)证书");X509V1CertificateGeneratorcertGen=newX509V1CertificateGenerator();stringsignerCN=ConfigurationManager.AppSettings["signerCN"].ToString();X509NamednName=newX509Name(String.Format("CN={0}",signerCN));X509NamecName=newX509Name(csr.Subject.Name);certGen.SetSerialNumber(序列号);certGen.SetIssuerDN(dnName);certGen.SetNotBefore(开始日期);certGen.SetNotAfter(过期日期);certGen.SetSubjectDN(cName);certGen.SetSignatureAlgorithm("SHA1withRSA");certGen.SetPublicKey(publicKey);//获取我们的私钥以使用Trace.Write进行签名(“获取我们的私钥以进行签名”);X509Store商店=newX509Store(StoreLocation.LocalMa中国);store.Open(OpenFlags.ReadOnly);stringsignerThumbprint=ConfigurationManager.AppSettings["signerThumbprint"].ToString();X509Certificate2Collection集合=(X509Certificate2Collection)store.Certificates;X509Certificate2Collectionfcollection=(X509Certificate2Collection)collection.Find(X509FindType.FindByThumbprint,signerThumbprint,false);X509Certificate2caCert=fcollection[0];Trace.Write("找到:"+caCert.FriendlyName);Trace.Write("HasPrivate"+caCert.HasPrivateKey.ToString());Trace.Write("密钥大小"+caCert.PrivateKey.KeySize.ToString());//将我们的签名密钥作为弹性对象获取Trace.Write("GetourSigningKeyasaBouncyobjectfromkey");AsymmetricCipherKeyPaircaPair=DotNetUtilities.GetKeyPair(caCert.PrivateKey);//生成BouncyCastle对象Trace.Write("生成BouncyCastle对象");Org.BouncyCastle.X509.X509Certificatecert=certGen.Generate(caPair.Private);//转换为windowstype2并获取Base64StringTrace.Write("转换为windows类型2并获取Base64字符串");X509Certificate2cert2=newX509Certificate2(DotNetUtilities.ToX509Certificate(cert));byte[]编码=cert2.GetRawCertData();字符串certOutString=Convert.ToBase64String(encoded);//输出到页面(隐藏)Certificate.Value=certOutString;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: