一、生成密钥
在D:/keys目录打开cmd,输入命令:
keytool -genkey -alias test_auth -keyalg RSA -keystore D:/keys/caskey.keystore
密钥名称:caskey 别名:test_auth 密码:asdfgh
命令:
keytool -export -file d:/keys/test_auth.crt -alias test_auth -keystore d:/keys/caskey.keystore
三、把证书导入到客户端JDK的cacerts证书库中(客户端tomcate一定要引用该jdk)
如果不再同一台电脑上,把服务端证书拷贝到客户端电脑上在进行操作
3、输入y 即可。
在服务端tomcate service.xml中开启https
<!--开启了此处证书 keystoreFile生成的证书的位置 keystorePass设置的密码-->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/keys/caskey.keystore"
keystorePass="asdfgh" />
4、请把web.xml中的serverName改成自己的IP地址
注:"f:\sso\test_auth.crt"为证书文件所在路径,test_auth.acr 为 测试证书
遇到问题
1、配置完仍然无法使用?
请关闭浏览器,重新打开浏览器
3、javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching xxx.xxx.xx found
检查web.xml中的配置
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.gevin.me:8443/cas/login</param-value>
</init-param>
确保其中的sso.gevin.me跟生成证书时第一个问填写的域名是一致的。如图:
在D:/keys目录打开cmd,输入命令:
keytool -genkey -alias test_auth -keyalg RSA -keystore D:/keys/caskey.keystore
密钥名称:caskey 别名:test_auth 密码:asdfgh
其中名字与姓氏最好写你的 域名,如果在本地测试你可以在C:\Windows\System32\drivers\etc\hosts文件中映射一个虚拟域名
命令:
keytool -export -file d:/keys/test_auth.crt -alias test_auth -keystore d:/keys/caskey.keystore
导出的证书名称:test_auth.crt,caskey为上一步生成的密钥名称
三、把证书导入到客户端JDK的cacerts证书库中(客户端tomcate一定要引用该jdk)
如果不再同一台电脑上,把服务端证书拷贝到客户端电脑上在进行操作
1、进入到" D:\Program Files\Java\jdk1.7.0_75\jre\lib\security "此目录,将cacerts删除
2、运行-->cmd-->输入
keytool -import -keystore "D:\Program Files\Java\jdk1.7.0_75\jre\lib\security\cacerts" -storepass asdfgh -keypass asdfgh -file d:\keys\test_auth.crt
storepass 生成密钥时第一次输入的口令 keypass 生成密钥时第二次输入的口令
3、输入y 即可。
注意:D:\Program Files\Java\jdk1.7.0_75\jre\lib\security 为客户端tomcate所引用的jdk路径,
安装
JDK
是有两个
jre
目录,一个在
jdk
底下,一个是独立的
jre
<!--开启了此处证书 keystoreFile生成的证书的位置 keystorePass设置的密码-->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/keys/caskey.keystore"
keystorePass="asdfgh" />
4、请把web.xml中的serverName改成自己的IP地址
注:"f:\sso\test_auth.crt"为证书文件所在路径,test_auth.acr 为 测试证书
遇到问题
1、配置完仍然无法使用?
请关闭浏览器,重新打开浏览器
2、后台出现异常
请确认你刚才导入证书的JDK是你现在 Tomcat运行所使用的JDK
3、javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching xxx.xxx.xx found
检查web.xml中的配置
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.gevin.me:8443/cas/login</param-value>
</init-param>
确保其中的sso.gevin.me跟生成证书时第一个问填写的域名是一致的。如图:
客户端基于spring wen.xml配置
所需包
<
context-param
>
<
param-name
>
serverName
</
param-name
>
<
param-value
>
http://127.0.0.1:8080/
</
param-value
>
</
context-param
>
<
context-param
>
<
param-name
>
casServerUrl
</
param-name
>
<
param-value
>
https://cas.service.com:8443/
</
param-value
>
</
context-param
>
<!-- CAS Server 通知 CAS Client,删除session,注销登录信息 youcb 20141117 -->
<
filter
>
<
filter-name
>
CAS Single Sign Out Filter
</
filter-name
>
<
filter-class
>
org.jasig.cas.client.session.SingleSignOutFilter
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
CAS Single Sign Out Filter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
<
listener
>
<
listener-class
>
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
</
listener-class
>
</
listener
>
<
filter
>
<
filter-name
>
CAS Authentication Filter
</
filter-name
>
<
filter-class
>
org.jasig.cas.client.authentication.AuthenticationFilter
</
filter-class
>
<
init-param
>
<
param-name
>
casServerLoginUrl
</
param-name
>
<
param-value
>
https://cas.service.com:8443/cas-service/login
</
param-value
>
</
init-param
>
</
filter
>
<
filter
>
<
filter-name
>
CAS Validation Filter
</
filter-name
>
<
filter-class
>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</
filter-class
>
<
init-param
>
<
param-name
>
casServerUrlPrefix
</
param-name
>
<
param-value
>
https://cas.service.com:8443/cas-service
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
redirectAfterValidation
</
param-name
>
<
param-value
>
true
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
encoding
</
param-name
>
<
param-value
>
UTF-8
</
param-value
>
</
init-param
>
</
filter
>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<
filter
>
<
filter-name
>
CAS HttpServletRequest Wrapper Filter
</
filter-name
>
<
filter-class
>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
CAS Authentication Filter
</
filter-name
>
<
url-pattern
>
/loginPage.htm
</
url-pattern
>
</
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CAS Validation Filter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
<
filter-mapping
>
<
filter-name
>
CAS HttpServletRequest Wrapper Filter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
<!-- 单点登入END -->
客户端可通过以下获取返回信息
Assertion assertion = AssertionHolder.getAssertion();
AttributePrincipal ap = assertion.getPrincipal();
AttributePrincipal ap = assertion.getPrincipal();
String name = ap.getName();
或者
Principal principal = httpRequest.getUserPrincipal();