C# 证书读取踩过的坑

最近倒腾一个银行的项目,被折腾的伤痕累累,主要是与银行对接时采用的证书验证的方式比较坑,也可能是之前没有接触过类似的东西吧。

 

在这记录一下踩的坑,以备缅怀。

1、项目最好使用FRAMEWORK 4.6版本。4.0版本说实话好多东西确实已经不适宜了。比如

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                       | SecurityProtocolType.Tls
                                       | SecurityProtocolType.Tls11//Tls11
                                       | SecurityProtocolType.Tls12; //Tls12

中 Tls11和Tls12这两个属性4.0中都没有的。

 

2、如果加载证书加载为空,可以尝试看看遍历一下能获取到的证书。

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);// 这里要注意证书的位置

 store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

                        Common.Common.WriteLogs(Common.Common.ObjectToJson(store));
                        Common.Common.WriteLogs(Common.Common.ObjectToJson(store.Certificates));

                        X509Certificate2Collection collect = store.Certificates;

                        Common.Common.WriteLogs(collect.Count.ToString());

                        for (int iIndex = 0; iIndex < collect.Count; iIndex++)
                        {
                            X509Certificate2 cer = collect[iIndex];
                            Common.Common.WriteLogs("第" + iIndex.ToString() + "个证书");
                            Common.Common.WriteLogs("SerialNumber:" + cer.SerialNumber);
                            Common.Common.WriteLogs("Thumbprint:" + cer.Thumbprint);
                            Common.Common.WriteLogs("SubjectName:" + cer.SubjectName);
                        }

Common.Common.WriteLogs方法为写日志的方法。

这样如何去查找证书就可以更有针对性了

我是通过证书指纹进行查找的,开始用序列数,但是不知道为啥始终查询不到。

开始指纹用的查看证书中的两位两位间隔的字符串,发现也找不到,后来打印到日志发现都是连在一起的。不过测试环境中序列号就是2位2位空格隔开的那种字符串也没问题。

X509Certificate2 certificate = store.Certificates.Find(X509FindType.FindByThumbprint, "指纹", false)[0];

 

3、应用程序池中的标识一定要设置。

经常会提示“未能创建 SSL/TLS 安全通道”。证书加载成功了,但是这就是死活过不去,后来,应用程序池-高级设置-进程模型-标识修改后解决了。我最终采用的是LocalSystem。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值