单点登录介绍和tomcat配置https双向认证
记录CAS单点登录实操、坑、原理、总结,在日后再次使用时可以直接过来翻阅
单点登录
什么是单点登录:
单点登录(Single Sign On),简称SSO。是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
背景:
随着企业的发展,业务系统的数量在不断的增加,老的系统却不能轻易的替换,会带来很多的开销。其一是管理上的开销,需要维护的系统越来越多。很多系统的数据是相互冗余和重复的,数据的不一致性会给管理工作带来很大的压力。业务和业务的相关性也越来越大,例如公司的计费系统和财务系统,财务系统和人事系统之间都不可避免的有着密切的关系。
为了降低管理的消耗,最大限度的重用已有投资的系统,很多企业都在进行企业应用系统集成(EAI)。企业应用集成可以在不同层面上进行:例如在数据存储层面的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户层面上的“通用企业门户”等等。还有身份认证的整合,也就是单点登录。
单点登录的技术实现机制
1、当用户访问系统时,会检查用没有登录过,没有就会重定向到认证系统进行登录认证。
2、认证成功认证系统会返回一个唯一标识用户身份的id(这里使用ticket指代)到用户的浏览器cookie中
3、用户再次访问或者重定向到网站应用,会同时将身边标识提交
4、应用系统通过这个身份标识去认证系统认证,认证通过,即可处理用户请求并返回数据给用户
5、其他的应用系统,在被用户访问时都会走上面相同的逻辑
核心就是共用一个认证系统,也就是单点登录系统。
HTTPS工作原理
CAS默认使用HTTPS,什么是HTTPS
利用tomcat服务器配置https双向认证
1、为服务器生成证书
keytool -genkey -v -alias tomcat -keyalg RSA -keystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -validity 36500
回车后依次输入一些信息:(密码我填的是password)
输入密钥库口令:
再次输入新口令:
它们不匹配。请重试
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: kim
您的组织名称是什么?
[Unknown]: kim
您所在的城市或区域名称是什么?
[Unknown]: kim
您所在的省/市/自治区名称是什么?
[Unknown]: kim
该单位的双字母国家/地区代码是什么?
[Unknown]: 123
CN=localhost, OU=kim, O=kim, L=kim, ST=kim, C=123是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,500 天):
CN=localhost, OU=kim, O=kim, L=kim, ST=kim, C=123
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储/home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore]
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -destkeystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
名字和姓氏那一项的值填域名或者IP,之后只能用填的值访问。如果填的是域名,只能用域名访问;反之,只能用IP访问。其他随便填。
2、为客户端生成证书
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore /home/kim/下载/apache-tomcat-8.5.35/https/mykey.p12
回车后输入信息:(密码我填的是123456)
输入密钥库口令:
密钥库口令太短 - 至少必须为 6 个字符
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: kim
您的组织名称是什么?
[Unknown]: kim
您所在的城市或区域名称是什么?
[Unknown]: kim
您所在的省/市/自治区名称是什么?
[Unknown]: kim
该单位的双字母国家/地区代码是什么?
[Unknown]: 123
CN=localhost, OU=kim, O=kim, L=kim, ST=kim, C=123是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 90 天):
CN=localhost, OU=kim, O=kim, L=kim, ST=kim, C=123
[正在存储/home/kim/下载/apache-tomcat-8.5.35/https/mykey.p12]
客户端的CN可以是任意值,双击mykey.p12文件,即可将证书导入至浏览器(客户端)。
3、让服务器信任客户端证书
keytool -export -alias mykey -keystore /home/kim/下载/apache-tomcat-8.5.35/https/mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file /home/kim/下载/apache-tomcat-8.5.35/https/mykey.cer
上述命令大致解释一下,讲客户端证书导出保存为mykey.cer文件
执行结果:
➜ ~ keytool -export -alias mykey -keystore /home/kim/下载/apache-tomcat-8.5.35/https/mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file /home/kim/下载/apache-tomcat-8.5.35/https/mykey.cer
存储在文件 </home/kim/下载/apache-tomcat-8.5.35/https/mykey.cer> 中的证书
4、将客户端导出的证书导入到服务器证书库
keytool -import -v -file /home/kim/下载/apache-tomcat-8.5.35/https/mykey.cer -keystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore
上述命令输入后,会有交互式命令提示,让你输入证书库的密码,我这里是上面设置的password
输入密码后,接着会有交互式提示,问你是否信任证书,填y表示是即可:
是否信任此证书? [否]: y
可以使用如下命令查看证书库中的证书:
keytool -list -keystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore
回车后需要输入证书库密码,密码输入后的显示为:
密钥库类型: jks
密钥库提供方: SUN
您的密钥库包含 2 个条目
tomcat, 2018-11-27, PrivateKeyEntry,
证书指纹 (SHA1): 67:00:D5:7F:31:A8:1F:EC:A5:BF:2A:44:C5:43:94:45:F4:62:0B:1E
mykey, 2018-12-14, trustedCertEntry,
证书指纹 (SHA1): 53:76:7B:63:1C:65:6E:DC:6C:93:A5:1D:B2:75:10:21:88:0F:D2:E3
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -destkeystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
5、让客户端信任服务端证书
keytool -keystore /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore -export -alias tomcat -file /home/kim/下载/apache-tomcat-8.5.35/https/tomcat.cer
导出服务端证书库,存储到tomcat.cer文件中,需要输入证书库密码,我的是password
输入后提示为:
存储在文件 </home/kim/下载/apache-tomcat-8.5.35/https/tomcat.cer> 中的证书
双击tomcat.cer文件,按照提示安装证书,将证书填入到"受信任的根证书颁发机构"。
6、配置tomcat
打开tomcat目录下的conf/sever.xml,找到Connector port="8443"配置段,修改为如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" maxThreads="150" schema="https"
secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="/home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore" keystorePass="password"
truststoreFile="/home/kim/下载/apache-tomcat-8.5.35/https/tomcat.keystore" truststorePass="password"
/>
7、测试
在浏览器中输入:https://localhost:8443/,会弹出选择客户端证书界面,点击“确定”,会进入tomcat主页,地址栏会有“锁”图标,表示本次会话已经通过HTTPS双向验证,接下来的会话过程中所传输的信息都已经过SSL信息加密。
我们的证书一开始创建不是特殊机构颁发的,所以本地测试需要在浏览器里导入证书,火狐浏览器需要添加例外