如何在我的Web服务中读取.p12文件

时间:2014-03-13 16:07:33

标签: c# asp.net .net web-services

我有一个问题。我有一个Web服务,我有一个“.p12”文件,我需要在我的Web服务中阅读以处理一些指令。阅读“.p12”文件是必要的(文件[认证]允许我在我的域中创建用户[谷歌电子邮件服务])

好吧,在我的机器上,Web服务运行正常,但是当我在服务器中发布Web服务时,它不起作用。我已将文件(.p12)复制到Web服务的主文件夹中,也在bin文件夹中,在服务器的“C”单元中复制,但它不起作用。

这是读取文件的行(我正在使用C#):

var certificate = new X509Certificate2(@"C:\\nameOfMyFile.p12", "notasecret", X509KeyStorageFlags.Exportable);

它向我显示一个错误:服务器无法处理请求。 --->内部错误。

之后,我尝试了这个:

string hpath = HttpContext.Current.Server.MapPath(".");
hpath = hpath + "\\nameOfMyFile.p12";
var certificate = new X509Certificate2(System.Web.HttpContext.Current.Server.MapPath(hpath, "notasecret", X509KeyStorageFlags.Exportable);

它向我显示了同样的错误:服务器无法处理请求。 --->内部错误。

之后,我只写了文件的名称:

var certificate = new X509Certificate2(@"nameOfMyFile.p12", "notasecret", X509KeyStorageFlags.Exportable);

它显示了此错误:服务器无法处理请求。 --->系统找不到指定的文件

那么,我是否需要为文件,文件夹,Web服务分配一个特殊权限?读取这样的文件(.p12)的最佳方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:4)

老实说,我不知道这是否是最好的方法,但它适用于我的情况。

添加这些名称空间:

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

我使用此代码:

X509Certificate2 certificate = new X509Certificate2(@"file.p12", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

最后我复制了我的" .p12"文件在" inetsrv"窗口文件夹。

答案 1 :(得分:2)

我的其他解决方案存在一个小问题:

  1. 您必须将.p12文件转储到" C:\ Windows \ System32 \ inetsrv \"
  2. 但是如果您需要应用程序文件夹中的.p12文件,例如:" Certificate \ xyz.p12" 那么最好是使用我的解决方案:

    path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Certificates\\CertificatesZoomrideDriver.p12");
    
     X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(path), "Vikas");
    

    它正在开发域名,本地和远程PC。

    Vikas Joshi :) :) :) :) :)