asp.net如何用ssl加密进行证书验证login.aspx登陆 ,急急。。。

zhangfengyi 2016-05-07 09:11:33
网站做好,IIS也已经配置好了,SSL都配置好了,可以通过https访问网站,但是我在登录的时候有问题,我的机器装了3个证书,不管选哪个,都能登录,这不符合我的要求,我把其中一个证书的缩微图与用户绑定,只有这个证书才能登录,下边的这段代码是别人在网站已经能使用的,通过WCF通信,但是在我这里报"未将对象引用设置到对象实例,求大家帮帮我,礼拜一要用,实在没办法了。。。。。。

public string Sys_Public_CertificateInfo()
{
string functionReturnValue = null;
string str = "";
System.Security.Cryptography.SHA256Managed tmp = new System.Security.Cryptography.SHA256Managed();
str = ServiceSecurityContext.Current.PrimaryIdentity.Name;//这句报错,未将对象引用设置到对象实例
//str = ServiceSecurityContext.Current.AuthorizationPolicies.Count.ToString();
str = str.Substring(str.Length - 40, 40).ToUpper();
functionReturnValue = BitConverter.ToString(tmp.ComputeHash(System.Text.UnicodeEncoding.Unicode.GetBytes(str)));
if (functionReturnValue != null)
{
functionReturnValue = functionReturnValue.Replace("-", "");
}
else
{
functionReturnValue = "";
}
tmp.Clear();
tmp = null;
return functionReturnValue;
}
...全文
669 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfengyi 2017-05-16
  • 打赏
  • 举报
回复
这段代码就可以了

                获取证书信息OK
                if (Request.IsSecureConnection)
                {
                    HttpClientCertificate hCert = Request.ClientCertificate;
                    if (hCert == null)
                    {
                        Response.Write("没有客户端证书");
                        return;
                    }
                    X509Certificate2 cert = new X509Certificate2();
                    try
                    {
                        cert.Import(hCert.Certificate);
                        str = cert.Thumbprint;
                        sub = cert.Subject;
                        after = cert.NotAfter.ToShortDateString();
                    }
                    catch (Exception ex)
                    {
                        Response.Write(ex.Message);
                        return;
                    }
                }
                DateTime da = DateTime.Parse(after);
                DateTime dt = DateTime.Now;

                if (Common.common.md5(str.ToUpper(), 32) != ds3.Tables[0].Rows[0]["certificateinfo"].ToString())
                {
                    err = "证书错误!";
                    flag = false;

                }
                if (dt > da)
                {
                    err = "证书过期!";
                    flag = false;
                }
zhangfengyi 2016-05-08
  • 打赏
  • 举报
回复
在客户端判断,调试的时候能读到证书信息,发布到IIS后读不到证书信息,郁闷啊

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                //轮询存储区中的所有证书  
                string str="";
                string sub="";
                string after="";
                bool flag = true;
                foreach (X509Certificate2 myX509Certificate2 in store.Certificates)
                {
                    //将证书的名称跟要导出的证书MyTestCert比较,找到要导出的证书  
                    str = myX509Certificate2.Thumbprint;
                    sub = myX509Certificate2.Subject.Split(',')[0].ToString().Split('=')[1].ToString();
                    after = myX509Certificate2.NotAfter.ToString();

                    if (sub == ds3.Tables[0].Rows[0]["certificatinfo_name"].ToString())
                    {
                        if (Common.common.md5(str.ToUpper(), 32) != ds3.Tables[0].Rows[0]["certificateinfo"].ToString())
                        {
                            flag = false;
                            break;
                        }
                    }
                    
                }
                store.Close();

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧