什么是两者之间的区别?

有帮助吗?

解决方案

x509证书该 是介绍。净v1。0/1.1的和(相对)限制其功能。它可以被用来获得的信息有关的现有证书(有效期,发行商等等)。它有简单的方法/行动(即读一cert从盘)。

x509Certificate2 是一个子类x509证书该附加功能。

  • 它表示实际X509certificate.
  • 这是新的。净框架v2。0.
  • 这类给你访问所有的V2和V3的性质(机构的关键标识符和使用的关键).
  • 它支持载入证书的证书存储。

其他提示

为了完整起见,这里是一个复制的有关部分 网站的链接到 在@dommer的答案,因为该网站可能不再是最只有在谷歌的缓谁知道多长时间:

1.1版本的框架,只有很少比其他 X509证书该类,以允许你来操纵的证书。在 事实上,v1。1x509证书该类只给了基本的支持:它只 给了访问X509版本1段(喜欢的有效期从和 效的日期、主题和公用钥),但不版本2段(喜欢 该权力机构的关键标识)和3版的领域(如关键 使用).有没有人支持载入一个证书,证书 储存,也没有设施的访问证书 撤销清单或证书信任的清单。Microsoft提高对 这与网络服务强化(华尔街)工具包的延伸 证书类和提供的类访问证书店。这些课程现在可以找到的。净3.0/2.0框架库。

第一大变化是一个新的类称为X509Certificate2哪 来自x509证书该.该方法访问X509 证书领域已经弃用,现在该类有 性访问这些领域。此外,如果证书 一个相关的私人钥匙然后类提供了进入这个关键。有方法能让你提供一个密码,如果私 关键是保护通过一个。密码是通过SecureString 参数,这是一个特别类,使确保当的对象 不再被使用的存储器的占领将被写入了所以 密码不能被读取通过另一个过程上的机器。安全串和其他形式的保护的数据将在一个 稍后部分。

由于X509Certificate2来自x509证书该这意味着你 可以叫静态的方法和CreateFromeCertFile CreateFromSignedFile通过X509Certificate2类。但是, 这些方法返回an x509证书该目的而你不能下来 投这一X509Certificate2对象。X509证书该类已 已经改进版本3.0/2.0:它提供了性访问 一些X509领域;它提供了进口和出口的方法 初始化的一个目的是从字节的数组或产生一个字阵列 证书和它具有的构造,将创造一个对象 从一个文件(ASN。1DER)和从一个字阵列。有趣的是, X509Certificate2类有一个构造,可以创建一个 X509Certificate2对象,从一个x509证书该对象。注意, 虽然an x509证书该对象只能显示X509v1领域 可以从创建一个X509v3证书,所以如果你创建的一个 X509Certificate2对象,从一个x509证书该对象,你会 能够访问X509v3领域。

要从“x509证书”到“X509Certificate2”转换的X.509证书,尝试这样的事情:

X509Certificate  X509  = sslStream.RemoteCertificate;
X509Certificate2 X5092 = new X509Certificate2(X509);

对于那些想读证书,并以此来验证人会简单地创建一个X509Certificate2并通过X509证书在它的构造。

有关签名的程序集(该exe)的代码会是这样的代码,以及我省略为了简单错误验证。

Module m = Assembly.GetEntryAssembly().GetModules()[0];
using (var cert = m.GetSignerCertificate())
using (var cert2 = new X509Certificate2(cert))
{
   var _clientHandler = new HttpClientHandler();
   _clientHandler.ClientCertificates.Add(cert2);
   _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
   var myModel = new Dictionary<string, string>
   {
       { "property1","value" },
       { "property2","value" },
   };
   using (var content = new FormUrlEncodedContent(myModel))
   using (var _client = new HttpClient(_clientHandler))
   using (HttpResponseMessage response = _client.PostAsync($"{url}/{controler}/{action}", content).Result)
   {
       response.EnsureSuccessStatusCode();
       string jsonString = response.Content.ReadAsStringAsync().Result;
       var json = new Newtonsoft.Json.JsonSerializer();
       var myClass = JsonConvert.DeserializeObject<MyClass>(json);
    }
}

显然,你的类不叫MyClass的,但你会从web服务期待一些业务对象。

您可以通过发送你需要填写的属性和值发送一类到你的动作。现在,您可以确保您收到的请求是来自有效的手机或Windows客户端读取请求证书,像这样:

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {           
       X509Certificate2 clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
       if (!clientCertInRequest.Verify() || !AllowedCerialNumbers(clientCertInRequest.SerialNumber))
       {
            Response.StatusCode = 404;
            return null;
       }
       //your code
   }

}

而剩下的就是设置你的Web服务器接受客户端证书......您可以阅读所有关于那个来自于新的格式属性,并确认获得公共Web服务,这是大多数做不到的只是被授权ISN”吨足够好的了(如果它是)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top