Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个用户同时访问证书文件_C#_Certificate - Fatal编程技术网

C# 多个用户同时访问证书文件

C# 多个用户同时访问证书文件,c#,certificate,C#,Certificate,这不是一个问题,但需要澄清。这是代码。这段代码所做的只是将cer文件发送到位于本地驱动器上的httpwebrequest中的服务器。我的问题是,如果多个用户同时尝试访问应用程序,会发生什么情况。我的意思是5-10个请求一次读取相同的cer。它会因为cer文件被其他线程锁定而中断读取/还是因为它只是只读的而不会中断 //You must change the path to point to your .cer file location. X509Certificate Cert = X509

这不是一个问题,但需要澄清。这是代码。这段代码所做的只是将cer文件发送到位于本地驱动器上的httpwebrequest中的服务器。我的问题是,如果多个用户同时尝试访问应用程序,会发生什么情况。我的意思是5-10个请求一次读取相同的cer。它会因为cer文件被其他线程锁定而中断读取/还是因为它只是只读的而不会中断

//You must change the path to point to your .cer file location. 
X509Certificate Cert = X509Certificate.CreateFromCertFile("C:\\mycert.cer");
// Handle any certificate errors on the certificate from the server.
ServicePointManager.CertificatePolicy = new CertPolicy();
// You must change the URL to point to your Web server.
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://YourServer/sample.asp");
Request.ClientCertificates.Add(Cert);
Request.UserAgent = "Client Cert Sample";
Request.Method = "GET";
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
// Print the repsonse headers.
Console.WriteLine("{0}",Response.Headers);
Console.WriteLine();
// Get the certificate data.
StreamReader sr = new StreamReader(Response.GetResponseStream(), Encoding.Default);
int count;
char [] ReadBuf = new char[1024];
do
{
    count = sr.Read(ReadBuf, 0, 1024);
    if (0 != count)
    {
        Console.WriteLine(new string(ReadBuf));
    }

}while(count > 0);

读取不锁定Windows中的文件…

为什么不从用户存储区而不是文件中发送证书,并消除此问题,如中所述的第二种方法。无论如何,您都需要将私钥加载到密钥存储中,因此我认为使用.cer文件中的证书没有任何意义。

这是一个非常大胆的说法。我只想声明,在共享模式下打开的文件也可以由请求共享模式的其他进程打开@雷姆斯·鲁萨努:我同意;还有一点,File.OpenRead默认为读取共享模式。是的,我知道这个链接就是我从中得到这段代码的。但是你知道我已经试过了,让它工作起来很痛苦。我之所以选择这个实现,也是因为我们的代码托管在应用服务器上。所以我真的不必担心安全问题。第二。我不需要从证书存储加载私钥。我可以使用“winhttpcertcfg.exe”授予访问将要读取证书私钥的用户帐户的权限-它可以工作。运行winhttpcertcfg.exe就是这样做的,将私钥加载到用户证书存储中。您如何解释您的代码没有指定私钥的位置,也没有指定访问它的密码?。无论如何,从.cer文件加载它可以正常工作。有人读取.cer文件没有威胁(因为它是公共文件)。此外,替换.cer文件也不是真正的威胁,还需要一个不同的私钥,如果它可以访问私钥,那么就不是真正的攻击。唯一严重的问题是操作,意外删除或移动.cer文件。是的,我没有在代码中指定私钥或密码。有一个技巧,你需要做。1.为将要读取的帐户(通常为ASPNET)2授予对.p12文件的私钥访问权限。然后将p12文件导出到证书存储到“本地计算机”帐户3。现在将该证书从证书存储导出到本地驱动器。就这样。您不必在代码中使用私钥/密码。并且该帐户将可以访问私钥。我会按照你花的时间投票给你的答案,并回答:)谢谢!