使用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(有效期10年) -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之后,asp.net项目再想去访问cas,登录后会提示重定向次数太多。原因是asp.net部署在IIS上,用的还是http。二者应该是没有建立起有效的通道。

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

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

using System.Net.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 System.Net.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网站二:实施

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

  1. 单点登录cas常见问题(九) - android app怎么接入cas单点登录系统?

    cas-server-support-rest子项目有什么用:如果一个android app要接入cas中心系统,就需要用到这个子项目. 引入的前提条件是, cas项目已经启用了,通常不会启用一部分项 ...

  2. 淘东电商项目(35) -SSO单点登录(登录功能完善)

    引言 本文代码已提交至Github(版本号:725238a1d0c829ee28cdef0ffe49e5f1c0020a2b),有兴趣的同学可以下载来看看:https://github.com/ylw ...

  3. cas单点登录-https的配置(一)

     前言   由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...

  4. 《果然新鲜》电商项目(36)-SSO单点登录(集成SSO认证服务)

    文章目录 引言 1. 集成xxl-sso-core 2. 集成xxl-server 总结 引言 在上一篇博客<果然新鲜电商项目(35)-SSO单点登录(XXL-SSO案例)>,主要讲解了S ...

  5. C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结

    为什么80%的码农都做不了架构师?>>>    有人曾问,如何正确估算项目周期?你是天天写C#程序的程序员,若做了一个 PHPwind 的单点登录,那估计需要几天时间? 客户只提了一 ...

  6. Cas websso单点登录系统接入汇总

    第 1 章 .net 应用程序 .NET应用程序通过修改web.config文件.主要改造内容如下: - 程序集部署 - 添加casClientConfig 配置节 - 修改ASP.NET forms ...

  7. springboot接入cas单点登录后跳转不到我需要跳转到页面_单点认证的一点心得

    最近项目要接入一批项目,接入必然涉及单点认证,在对接的单点认证主要分为几类,oauth .cas.还有一些其他的. 其实主要分为2类: 一类对方提供登录接口,我们做登录页面,用户输入用户名和密码,我们 ...

  8. 尚硅谷2020微服务分布式电商项目《谷粒商城》-单点登录(jwt)

    学习更多的知识,整理不易,拒绝白嫖,记得三连哦 关注公众号:java星星 获取全套课件资料 1. 用户管理提供数据接口 1.1. 数据验证功能 根据接口文档知: 请求方式:GET 请求路径:check ...

  9. 新建一个项目,如何使用abp用户登录系统

    1.首先参考Framework.Web里的packages.config,把相关的包都安装好. 2.App_Start文件夹下的xxxModule.cs和Startup.cs拷过来,修改下命名空间. ...

最新文章

  1. AD域中NTP服务器的配置
  2. 解决Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.
  3. 怎么改掉科学计数法_马拉松猝死频发为哪般——听听冠军们怎么说
  4. 实习热招 | 想找「NLP」实习机会?这 7 家公司正在等你
  5. mysql 中有什么命令_常用mysql命令大全
  6. python购物车典例_Python实现的购物车功能示例
  7. 换linux服务器 验证码不显示
  8. 洛谷 [P2859] 摊位预定
  9. 平时常见的音频文件格式有哪些呢?
  10. Android游戏开发–基本游戏架构
  11. 使用java实现MD5码算法
  12. Everything Toolbar - 文件搜索神器everything的增强插件
  13. 我的CSDN之旅:2020年终总结
  14. html转换成chm乱码,【全部解决】用Docbook生成htmlhelp + 【完全解决】生成的chm中标题和左边的索引目录是乱码的问题...
  15. 医院信息科招聘计算机专业试题,医院信息科招收计算机科学与技术专业的笔试试题...
  16. Windows-端口状态含义
  17. 嵌入式系统和计算机系统
  18. 深度学习前沿算法思想
  19. 如何在Android中使用离线的谷歌地图Google maps
  20. mysql数据库有merge into 吗

热门文章

  1. 从零开始,到完全胜任alipay支付模块开发之知识点补充(第一篇)
  2. 经验积累①:关于设备程序的版本迭代方案详解
  3. vue编写一个登录页面,使用Tab栏实现“账号登录”和“二维码登录”这两种方式的切换
  4. java/php/net/python保险公司报销设计
  5. sql server压缩_SQL Server 2016中的压缩和解压缩功能
  6. 你该如何填报高考志愿?
  7. 解决使用代理时 Win10 UWP 应用无法联网问题
  8. Java JUC系列
  9. SQLZOO知识点补充
  10. 5G和WiFi等其他网络现状及挑战