Tag: x509certificate

如何检查X509证书是否已启用“扩展validation”?

如果X509Certificate(或X509Certificate2)设置了“扩展validation”(EV)标志,我很难找到一种可靠的方法来检查我的C#(。Net 4.0)应用程序。 有谁知道最好的方法?

如何在C#中解析(转换为RSAParameters)X.509私钥?

我正在使用加密通道来加密两个设备之间的通信。 所以我正在创建一个辅助类来进行加密和解密。 我已经google了很多,发现了一段可以将RSA公钥解析为RSACryptoServiceProvider的代码。 这是代码: public static RSACryptoServiceProvider DecodeX509PublicKey(byte[] x509key) { byte[] SeqOID = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 }; byte[] seq = new byte[15]; MemoryStream mem = new MemoryStream(x509key); BinaryReader binr = new BinaryReader(mem); byte bt = 0; ushort twobytes = 0; try { […]

System.Security.Cryptography.CryptographicException:keyset不存在

当我将x509证书发送到encypt和decypt消息时,我收到了一些错误信息,无法解决此问题。 有人会发生什么事来解决这个错误吗? 谢谢。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 例外细节: System.Security.Cryptography.CryptographicException:keyset不存在。 来源错误: 第53行:使用(RSACryptoServiceProvider rsaProviderDecrypt =(RSACryptoServiceProvider)cerDecrypt.PublicKey.Key)第54行: {第55行:plainHashBytes = rsaProviderDecrypt.Decrypt(encryptedHashBytes,false); 第56行: rsaProviderDecrypt.Clear(); 第57行: rsaProviderDecrypt.Dispose(); 源文件:E:\ PayUSite \ PayMvcApp \ Controllers \ HashMessageController.cs行:55 堆栈跟踪: [CryptographicException:键集不存在。 ] System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)+41 System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext,Byte [] pbEncryptedKey,Int32 cbEncryptedKey,Boolean fOAEP,ObjectHandleOnStack ohRetDecryptedKey)+0 System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte [] rgb,Boolean fOAEP)+579 源代码: string docFile = Server.MapPath(“~/docx/DirectAccess_StepByStep.doc”); HashAlgorithm hash = HashAlgorithm.Create(“SHA1”); byte[] hashedBytes; using (FileStream […]

将ASN.1数据转换为公钥需要什么? 例如,我如何确定OID?

此代码与反垃圾邮件工作中使用的DKIM签名validation有关 。 我有来自s1024._domainkey.yahoo.com的byte[] ,它是ASN.1编码的,但我不知道是否仅包含足够的信息来实现公钥。 基于此类 ,我似乎可以将ASN.1密钥转换为X509Certificate公钥,但我需要提供OID和一些ASN.1编码的参数。 在这个例子中,我有ASN1密钥的元数据: RSA编码密钥(根据RFC3447,ASN.1 DER编码[ITU-X660-1997] RSAPublicKey) 与sha1 sha256哈希算法一起使用 使用与RFC3447的A.2节中的下表相关的OID(虽然我不知道如何将此信息转换为完整的OID) /* * 1.2.840.113549.1 * MD2 md2WithRSAEncryption ::= {pkcs-1 2} MD5 md5WithRSAEncryption ::= {pkcs-1 4} SHA-1 sha1WithRSAEncryption ::= {pkcs-1 5} SHA-256 sha256WithRSAEncryption ::= {pkcs-1 11} SHA-384 sha384WithRSAEncryption ::= {pkcs-1 12} SHA-512 sha512WithRSAEncryption ::= {pkcs-1 13} */ 代码示例 string pubkey = “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB”; byte[] pubkeyByteArray […]

如何validationX509证书?

我必须编写一个工具来validationX509证书是否有效(输入=证书路径/主题和密码)。 我怎样才能做到这一点? 我不太了解证书……

如何使WCF客户端符合特定的WS-Security – 签署UsernameToken和SecurityTokenReference

我需要创建一个wcf客户端来调用我无法控制的服务。 我得到了一个wsdl和一个有效的soapui项目。 该服务使用用户名/密码和x509证书。 UPDATE 我现在明白问题是什么,但我仍然不确定我需要采取哪些步骤才能创建所需的消息,所以任何帮助都将非常感激。 我需要同时签署UsernameToken和SecurityTokenReference。 由于不再使用,我必须从此post中删除我必须创建自定义绑定的代码。 我不再向绑定添加SecurityBindingElement,而是添加一个将安全元素写入标头的新行为。 因此,通过inheritanceSignedXml类,添加签名引用然后调用ComputeSignature以在Security头中创建Signature节点,从头开始创建安全节点。 您需要传递xml以登录SignedXml构造函数才能使其生效。 传递UsernameToken是没问题的,这似乎是正确签名的。 问题是SecurityTokenReference仅在调用ComputeSignature()时创建,因此我无法向此元素添加签名引用,因为它在需要时不存在(在SignedXml的重写的GetIdElement方法中)在ComputeSignature()之前调用的) 我用来创建要插入Security头的签名块的代码如下 string certificatePath = System.Windows.Forms.Application.StartupPath + “\\” + “Certs\\sign-and- enc.p12”; XmlDocument xd = new XmlDocument(); xd.LoadXml(xml); // Set Certificate System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new X509Certificate2(certificatePath, “password”); MySignedXml signedXml = new MySignedXml(xd); signedXml.SigningKey = cert.PrivateKey; // Create a new KeyInfo object. KeyInfo keyInfo = new […]

C#如何validationRoot-CA-Cert证书(x509)链?

假设我有三个证书(Base64格式) Root | — CA | — Cert (client/signing/whatever) 如何在C#中validation证书和证书路径/链? (所有这三个证书可能都不在我的计算机证书库中) 编辑 :BouncyCastle具有validationfunction。 但我试图不使用任何第三方库。 byte[] b1 = Convert.FromBase64String(x509Str1); byte[] b2 = Convert.FromBase64String(x509Str2); X509Certificate cer1 = new X509CertificateParser().ReadCertificate(b1); X509Certificate cer2 = new X509CertificateParser().ReadCertificate(b2); cer1.Verify(cer2.GetPublicKey()); 如果cer1未由cert2(CA或root)签名,则会出现exception。 这正是我想要的。

格式错误的参考元素

我试图将引用添加到我的安全标头,并遇到一个相当普遍的错误: 格式错误的参考元素 我尝试了以下类似的结果: 通过将元素的ID作为Reference对象的URI传入来引用文档中的元素。 通过LoadXml()方法将XmlElement对象传递给Reference 。 我正在使用此StackOverflowpost上找到的重载GetIdElement检索XmlElement引用。 当我传入一个空字符串作为URI , ComputeSignature()方法按预期工作。 但是,我需要添加最多3个对安全标头的引用。 更新#1 感谢这篇博文 ,我能够从中创建简化版本,我相信导致我的问题的是使用Namespace属性和前缀。 更新#2 看起来似乎元素的Id属性上的Namespace声明导致发生此错误。 更新#3 我想我有这个工作。 请参阅下面的回答post。 工作样本: 请注意,定义了命名空间的Id XAttribute不起作用; 而没有定义命名空间的Id XAttribute确实有效。 private void CreateSecurityAndTimestampXML(string fileName) { TimestampID = “TS-E” + GUID.NewGuid(); DateTime SecurityTimestampUTC = DateTime.UtcNow; XDocument xdoc = new XDocument( new XElement(wsse + “Security”, new XAttribute(XNamespace.Xmlns + “wsse”, wsse.NamespaceName), new XAttribute(XNamespace.Xmlns + […]

在IIS上托管的C#中使用USB令牌打开X509证书选择

我正在制定一项要求,要求在ASP.Net C#中对PDF文件进行数字签名,并开发了一个在我的本地机器上使用USB令牌获取客户端证书的应用程序。 但是,在IIS服务器上托管此应用程序时收到错误“当前会话不是交互式” 。 任何人都有任何想法,我们如何从ASP.Net C#中的客户端机器获取X509Certificates,并且此应用程序托管在IIS服务器而不是控制台应用程序上。 我的代码供参考: private void getSign() { X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); X509Certificate2 cert = null; //manually chose the certificate in the store X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection); if (sel.Count > 0) cert = sel[0]; else { //MessageBox.Show(“Certificate not found”); return; } SignWithThisCert(cert); }

X509Certificate.CreateFromCertFile – 指定的网络密码不正确

我有一个.NET应用程序,我想用它作为客户端来调用SSL SOAP Web服务。 我已经获得了一个名为foo.pfx的有效客户端证书。 证书本身有密码。 我已将证书放在以下位置: C:\certs\foo.pfx 要调用Web服务,我需要附加客户端证书。 这是代码: public X509Certificate GetCertificateFromDisk(){ try{ string certPath = ConfigurationManager.AppSettings[“MyCertPath”].ToString(); //this evaluates to “c:\\certs\\foo.pfx”. So far so good. X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath); // exception is raised here! “The specified network password is not correct” return cert; } catch (Exception ex){ throw; } } 听起来像是试图读取磁盘的.NET应用程序的例外。 CreateFromCertFile方法是一个静态方法,应该创建X509Certificate的新实例。 该方法未被覆盖,并且只有一个参数:路径。 当我检查exception时,我发现: _COMPlusExceptionCode […]