解决一个难题有时候比一帆风顺的做完要爽得多。。
昨天跟着identityserver4教程做demo,前面几步正常,到写demo客户端连接认证的时候卡住了。
打开client的Development
模式,页面显示的错误是证书错误。
端口问题?
但是在identityserver4这边,也开始我看到了重定向地址不匹配的错误,我的IIS配置的是9012端口,而日志显示的是44332。
我搜索了整个工程,发现只有launchsettings.json
里有这个地址,但是发布到IIS后,显然不应该会有相关信息了。
不管如何,将这个地址也改成9012,并且在Startup
中配置了https重定向选项
services.AddHttpsRedirection(options =>
{
options.HttpsPort = 9012;
});
再发布,再client页面看到的错误没变,不过identityserver没有显示什么异常了。
其实后来反过头想,可能原来server端异常是我在vs调试时碰到的异常,并不是这次的log,不过没有再深究。
证书错误?
因为无论是client还是server的页面,在浏览器中打开,浏览器都提示连接安全,所以我一直没有认为真的时证书问题,还是找Identityserver的问题。
换证书-IIS
知道我在一个论坛帖子里(看了太多的解决方案,已经不记得是哪个了),有人说他删除并且重新添加一下证书就好了。
抱着死马当活马医的心态,我删除了iis的证书,重新在IIS里生成自签名证书,配置到identityserver中,这下好了,浏览器都提示证书不安全了。
我将新生成的证书挪到受信任根证书颁发者中,浏览器依旧不识别,当然,之前的错误还在。
重新生成证书-命令
想了想为什么,发现可能实证书颁发的subject
是我的计算机名称,而网站地址我的是localhost
,不匹配。
不过又发现IIS生成的自签名证书,竟然不能改CN字段。。无奈又去网上搜索,不想重新下载什么openssl之类的,最终发现powershell有生成自签名证书的功能:
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:LocalMachineMy"
重新生成这个证书,在IIS中给identityserver的证书配置为这个(注意,只有存储在My
这个区域的证书IIS才能看到)。
最后将证书在证书管理器(contana搜索栏输入cert就能找到)中,将证书复制到受信任根证书颁发者中。
重新启动服务器,好了!
结论
其实还是不知道为什么,之前的证书按道理也绝对是好的。。。