Tag: x509certificate2

如何创建一个最小的虚拟X509Certificate2?

我是一个.NET应用程序的unit testing; 一些unit testing涉及以编程方式生成X509Certificate2对象。 我不关心实际的签名/私钥/validation的东西,我只想拥有一个在检查其字段时不会抛出exception的对象。 我尝试使用无参数构造函数,但是当访问时,一大堆字段会抛出exception。 如调试器中所示: SubjectName =’(new System.Collections.Generic.Mscorlib_CollectionDebugView(result.Certificates))。Items [0] .SubjectName’抛出类型’System.Security.Cryptography.CryptographicException’的exception 我也尝试在其中传递带有一些随机数的字节数组,但是甚至没有构造(数组是否需要特定的大小?) 那么,问题: 以编程方式生成X509Certificate2对象的最简单(最少代码行)的方法是什么,该对象不会在字段/属性访问时抛出exception?

将证书导出为BASE-64编码的.cer

我试图导出没有私钥的证书,如BASE-64编码文件,与从Windows导出相同。 从Windows导出时,我可以在记事本中打开.cer文件。 当我尝试以下操作并在记事本上打开时,我得到二进制数据……我认为它是……不可读的。 X509Certificate2 cert = new X509Certificate2(“c:\\myCert.pfx”, “test”, X509KeyStorageFlags.Exportable); File.WriteAllBytes(“c:\\testcer.cer”, cert.Export(X509ContentType.Cert)); 我尝试删除’X509KeyStorageFlags.Exportable’,但这不起作用。我错过了什么吗? 编辑 – 我试过了 File.WriteAllText(“c:\\testcer.cer”,Convert.ToBase64String(cert.Export(X509ContentType.Cert))) 然而,这似乎有效,但缺少“—–开始证书—–”和“—–结束证书—–”

从httprequest C#读取客户端证书

我试图使用Request.ClientCertificate读取X509证书,但没有返回任何内容。 证书肯定附加到请求,因为我可以从发送请求的页面获取证书信息。 我曾尝试从几个不同的地方阅读证书,但似乎无法让它工作。 我从这篇KB文章的代码开始。 在请求的页面中,我尝试打印出有关证书的一些信息,但响应中没有返回任何内容。 这是在IIS 5.1上运行,通信是通过SSL进行的。 这必须使用.Net框架的第2版完成 为什么证书似乎消失了?

如何在C#中使用私钥? “找不到请求的对象。”

我正在尝试为MasterCard Match实施身份validation,作为以下文档的一部分,他们有一个示例私钥: https://developer.mastercard.com/portal/display/api/OAuth+Validation 在该页面上,它们有两个版本的密钥,一个是base64编码的文本,在页面上可见,还有一个可下载的.p12文件。 如何导入此密钥以用作x509certificate2? 无论我尝试什么,我都会收到消息“无法找到所请求的对象。”。 我试着用.net源码挖掘它,但是我在导入的对象上得到了死胡同 [SecurityCritical] [MethodImpl(MethodImplOptions.InternalCall)] internal static extern uint _QueryCertFileType(string fileName); 我已经尝试了以下内容,并且所有这些都失败了相同的上述消息 new X509Certificate2(@”c:\test\mc-openapi-csr.pem”) new X509Certificate2(@”c:\test\mc-openapi-csr.pem”, “mcapi”) new X509Certificate2(@”c:\test\mc-openapi-csr.pem”, “mckp”) 所以我将文本块复制到“copied.txt”,并尝试使用该文件,我也尝试读取字节,并手动传递,我也尝试过使用 X509Certificate.CreateFromCertFile(fileName) 两个文件。 有任何想法吗? 证书不好吗? 我使用错误的课吗? 该错误消息的含义是什么? – 更新 – 在Bad Zombie的建议下,我尝试了BouncyCastle: var pem = new Org.BouncyCastle.OpenSsl.PemReader(File.OpenText(fileName)); RsaPrivateCrtKeyParameters rsaParameters = (RsaPrivateCrtKeyParameters)pem.ReadObject(); using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(new RSAParameters { […]

从字符串创建X509Certificate2时“无法找到请求的对象”exception

我正在尝试从字符串创建X509Certificate2 。 让我举个例子: string keyBase64String = Convert.ToBase64String(file.PKCS7); var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String)); 和keyBase64String有这样的内容: “MIIF0QYJKoZI ……..hvcNAQcCoIIFwjCCBb4CA0=” 和file.PKCS7是我从数据库下载的字节数组 。 创建X509Certificate2时,我遇到以下exception: 找不到请求的对象 并且堆栈跟踪: “无法在系统中的System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte [] rawData)的System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32hr)中找到请求的对象”X509Certificate2exception“无法找到请求的对象”}。 WebApp.SoupController.d__7.MoveNext()上的System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)中的Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData,Object password,X509KeyStorageFlags keyStorageFlags)在D:\ Projects \ WebApp \ Controllers \ SoupController.cs中:第118行 请告诉我我做错了什么。 任何帮助将不胜感激!

C#Flurl – 将WebRequestHandler添加到FlurlClient

我正在与Flurl合作,以获得需要基于证书的身份validation的API。 我从这篇SOpost中看到,向WebRequestHandler添加证书并指示HttpClient使用此处理程序很容易。 但是,使用Flurl对我来说并不是那么清楚。 我尝试了以下三件事。 扩展DefaultHttpFactory 我首先怀疑我需要创建自己的X509HttpFactory : DefaultHttpFactory ,它将创建处理程序并将其分配给HttpClient 。 但是,在查看源代码时,我注意到CreateClient的构造函数已经需要一个处理程序。 这个处理程序来自哪里? 使用DefaultHttpFactory创建客户端 WebRequestHandler handler = new WebRequestHandler(); handler.ClientCertificates.Add(myX509Cert); var clientFactory = new DefaultHttpClientFactory(); FlurlClient fc = clientFactory.CreateClient(url, handler); 由于HttpClient无法转换为FlurlClient因此无法编译 使用ConfigureHttpClient var clientFactory = new DefaultHttpClientFactory(); FlurlClient fc = new Url(“foobar.com”).ConfigureHttpClient(client => client = clientFactory .CreateClient(url, handler)); 这似乎是最可行的选项,但我不确定,因为委托是一个没有返回类型的Action 。 问题 使用Flurl支持客户端证书身份validation的最佳/正确方法是什么?

如何使用C#从PKCS#12(.p12)文件获取私钥

我试图使用PKCS#12证书签署一些数据,但是我从PKCS#12(.p12)文件获取私钥时遇到问题。 public byte[] sign(string text) { string password = “1111”; X509Certificate2 cert = new X509Certificate2(“c:\\certificate.p12”,password); byte[] certData = cert.Export(X509ContentType.Pfx,password); X509Certificate2 newCert = new X509Certificate2(certData, password); RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)newCert.PrivateKey; SHA1Managed sha1 = new SHA1Managed(); UnicodeEncoding encoding = new UnicodeEncoding(); byte[] data = encoding.GetBytes(text); byte[] hash = sha1.ComputeHash(data); return crypt.SignHash(hash, CryptoConfig.MapNameToOID(“SHA1”)); } 问题是newCert.PrivateKey为null但如果我使用.pfx certicitae以类似的方式工作。 public byte[] […]

OpenSSL和C#之间的不同S / MIME签名

我正在尝试在我的.Net程序中使用OpenSSL代码。 这是代码: openssl pkcs12 -in “My PassKit Cert.p12” -clcerts -nokeys -out certificate.pem openssl pkcs12 -in “My PassKit Cert.p12” -nocerts -out key.pem smime -binary -sign -signer certificate.pem -inkey key.pem -in manifest.json -out signature -outform DER 我试图使用.Net OpenSSL,但我完全不知道如何使用它,我找不到一个好的文档。 我决定使用.Net来执行相同的签名过程,这里是代码: var dataToSign = System.IO.File.ReadAllBytes(filePathToSign); ContentInfo contentInfo = new ContentInfo(dataToSign); X509Certificate2 signerCert = new X509Certificate2(System.IO.File.ReadAllBytes(signerPfxCertPath), signerPfxCertPassword); var signedCms = […]

使用HttpClient,HTTPS请求失败

我使用以下代码并获取HttpRequestExceptionexception: using (var handler = new HttpClientHandler()) { handler.ClientCertificateOptions = ClientCertificateOption.Manual; handler.SslProtocols = SslProtocols.Tls12; handler.ClientCertificates.Add(new X509Certificate2(@”C:\certificates\cert.pfx”)); // I also tried to add another certificates that was provided to https access // by administrators of the site, but it still doesn’t work. //handler.ClientCertificates.Add(new X509Certificate2(@”C:\certificates\cert.crt”)); //handler.ClientCertificates.Add(new X509Certificate2(@”C:\certificates\cert_ca.crt”)); using (var client = new HttpClient(handler)) { var response = […]

尝试从Windows certstore读取PrivateKey时出现exception

我使用OpenSSL创建了一个私钥和公钥对,然后我生成了一个.p12文件,将其导入我的Windows证书库。 密钥对和.p12文件是在Windows XP中创建的,我试图在Windows 7中使用它。我试图从IIS中的Web服务(.svc)中访问密钥。 如果我尝试从独立应用程序中读取私钥,我可以毫无问题地执行此操作,但是当我尝试从我的Web应用程序中读取它时,我总是会遇到以下exception: ‘cert.PrivateKey’ threw an exception of type ‘System.Security.Cryptography.CryptographicException’ 这是整个堆栈跟踪: en System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) en System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) en System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() en System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) en System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() en ValidKeyDll.ValidKey.getLlaveDeAlmacen(String almacen, Boolean esLlavePrivada) en C:\Users\desarrollo\Documents\ValidKeyDll\ValidKeyDll\ValidKey.cs:línea 58 en ValidKeyDll.ValidKey.firmaCadena(String almacen, String cadenaFirmar) […]