700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用http的asp.net项目接入https的CAS单点登录系统

使用http的asp.net项目接入https的CAS单点登录系统

时间:2021-10-14 16:50:29

相关推荐

使用http的asp.net项目接入https的CAS单点登录系统

使用http的应用网站,接入https的CAS单点登录系统,结果就是登录之后,提示重定向次数太多,打不开应用网站的页面。

猜测原因是单点登录服务器与集成应用网站之间没有建立起有效连接。实际上应该也是,因为参照网上教程的做法,问题解决。

具体情况是这样的:

一、背景

客户近期在搞等保测试。测出了一些问题。其中之一是CAS登录的时候,密码明文传输。世界上没有绝对的安全,安全都是相对的,而且有成本,需要权衡。或者说,这是质量属性里的一个权衡点。https解决的就是传输的安全问题。由于客户的网络环境是专网,没有接入互联网,所以之前基本都是http,所以整改措施之一是将http改为https。

https,就是在http协议上应用了SSL(安全套接字协议层);需要使用X.509数字证书。这个东西需要购买,阿里云上也有免费的,但那应该是跑在阿里云上的应用,你一个专用网络咋整。只能自己生成证书。然而自己制作的证书,浏览器默认就是不承认,需要用户手动确认后才能继续访问。不过,好在这并不会影响加密传输,虽然浏览器用红色在HTTPS上画了一道删除线,并标上不安全。

二、tomcat上的部署

我们的CAS5.1.8部署在tomcat 8.5.78上。要让CAS支持https,只需tomcat改为支持https就可以了。步骤为:

1、制作证书

利用JDK下的keytool,命令行方式下

keytool -genkeypair -alias tomcat(名字随便起) -keypass 私钥的口令 -keyalg RSA -keysize 1024 -validity 3650(有效期) -keystore c:/tomcat.jks -storepass 用于获取私钥口令的口令

注意证书加密方法为RSA。

-storepass 指定密钥库的密码(获取keystore信息所需的密码)

-keypass 指定别名条目的密码(私钥的密码)

2、部署到tomcat

1)将生成的证书tomcat.jks拷贝到<tomcat>/conf/

2)修改<tomcat>/conf/server.xml

将相关注释去掉,并修改相关属性

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/tomcat.jks" certificateKeystorePassword="获取私钥口令的口令"type="RSA" /></SSLHostConfig></Connector>

3)修改<tomcat>/conf/web.xml

强制用https访问tomcat。如果用http地址访问,则自动跳转到 https。

在文件末尾,</web-app>前插入:

<login-config><!-- Authorization setting for SSL --><auth-method>CLIENT-CERT</auth-method><realm-name>Client Cert Users-only Area</realm-name></login-config><security-constraint><!-- Authorization setting for SSL --><web-resource-collection ><web-resource-name >SSL</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>CONFIDENTIAL</transport-guarantee></user-data-constraint></security-constraint>

4)重启tomcat

再访问tomcat上的cas,就已经是https了。

三、应用上的部署

如前所述,改为https之后,项目再想去访问cas,登录后会提示重定向次数太多。原因是部署在IIS上,用的还是http。二者应该是没有建立起有效的通道。

这里,使用的是cas的客户端(DotNetCasClient.dll)与cas服务器交互。参考网上教程,修改这个客户端。从CAS官网下载对应版本的DotNetCasClient源码,修改后,编译得到dll,替换掉项目当前版本即可。

(1)在Visual Studio中打开“CASDotNetClient”项目中的“\Utils\HttpUtil.cs”文件,添加如下命名空间:

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

(2)在HttpUtil类中增加如下方法:

internal static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) {return true; }

(3)在PerformHttpGet方法中添加验证服务器证书回调自动验证代码,添加代码后的PerformHttpGet方法如下:

internal static string PerformHttpGet(string url, bool requireHttp200) {string responseBody = null; //-- 以下新添加的代码:验证服务器证书回调自动验证 ServicePointManager.ServerCertificateValidationCallback = new .Security.RemoteCertificateValidationCallback(CheckValidationResult); //-- 以上为新添加的代码 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {if (!requireHttp200 || response.StatusCode == HttpStatusCode.OK) {using (Stream responseStream = response.GetResponseStream()) {if (responseStream != null) {using (StreamReader responseReader = new StreamReader(responseStream)) {responseBody = responseReader.ReadToEnd(); } } } } } return responseBody; }

复制代码

(4)保存修改并重新生成解决方案。

四、小结

局域网或非互联网的网络,如果想浏览器承认数字证书,可以先生成根证书,再用根证书签发一张证书,部署到web服务器;同时将根证书导入客户端。https其实就这点麻烦,其他与http使用上没有区别。目前安全性要求越来越高,我们开发的web项目,从一开始就应该考虑用https。

相关文章:

Yale CAS + .net Client 实现 SSO(3)

局域网内多台机器使用自签发证书架设https网站二:实施

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。