知识点:
SSO:单点登录(Single Sign On),是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS:耶鲁大学开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Server),他是一个开源的、相对比较简单易用的SSO解决方案。
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
1.环境准备
Linux服务器
PS:192.168.XX.XX是服务端,已运行CAS服务,192.168.XX.XXX是客户端
SSO框架:CAS
1.1 首先创建本地域名
demo.testcas.com 用来绑定CAS-Server
创建方法:
进入:C:\WINDOWS\system32\drivers\etc
打开:hosts文件
任意空白处添加如下:
192.168.XX.XXX(Linux服务器IP地址) demo.testcas.com
1.2 生成ssl证书
Cas server默认的安全认证是基于https协议的,这就要求在应用程序和CAS Server端配置SSL协议。
一般网络上生成自用的不受浏览器信任的证书都是直接通过JDK自带的应用keytool来制作的,但是因为我们用了Ngnix作为代理服务器,
而Ngnix不兼容keytool生成的证书来部署HTTPS网站,所以需要使用OpenSSL来生成证书。
登录Linux机器,创建一个文件夹用来存放ssl证书
生成CA私钥:
输入:openssl genrsa -des3 -out ca.key 2048
ca.crt CA根证书(公钥):
输入:openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
我的测试网站域名为demo.testcas.com
生成demo.testcas.com证书私钥:
输入:openssl genrsa -des3 -out demo.testcas.com.pem 1024
制作解密后的demo.testcas.com证书私钥:
输入:openssl rsa -in demo.testcas.com.pem -out demo.testcas.com.key
生成签名请求:
输入:openssl req -new -key demo.testcas.com.pem -out demo.testcas.com.csr
用CA进行签名:
输入:openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in demo.testcas.com.csr -out demo.testcas.com.crt
如果Linux机器的/etc/pki/CA目录下没有index.txt,这里输入会报错。
首先删除/etc/pki/CA/private目录下的cakey.pem文件,不存在此文件则忽略。
输入:cd /etc/pki/tls/misc
输入:./CA -newca
生成了index.txt文件,重新执行报错的输入
输入:openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in demo.testcas.com.csr -out demo.testcas.com.crt
到此ssl证书生成完毕。
2.在Linux机器上安装nginx,可yum安装也可以编译安装
安装完成后配置nginx.conf文件
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream demo { server 127.0.0.1:8781; } server { listen 80; server_name demo.testcas.com; rewrite ^(.*)$ https://$host$1 permanent; #charset koi8-r; #access_log logs/host.access.log main; location / { #root html; #index index.html index.htm; proxy_pass http://demo; } } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # server { listen 443 ssl; server_name demo.testcas.com; ssl_certificate mycas.crt; ssl_certificate_key mycas.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { #root html; #index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://192.168.XX.XX:8443; } } }
3.把ssl证书导入到jre中作为信任证书
输入:keytool -import -keystore "/usr/local/jdk/jre/lib/security/cacerts" -storepass changeit
-keypass changeit -alias testcas -file /root/demo.testcas.com.crt
别名alias可以随便取,jdk和crt文件的路径得选择自己机器对应路径。
4.重启nginx,打开浏览器输入https://demo.testcas.com/cas/login,
https://192.168.XX.XX:8443/cas/login是服务端的登录接口
显示登录界面则客户端测试成功
参考资料:
http://www.cnblogs.com/notDog/p/5264666.html
https://blog.csdn.net/php_boy/article/details/6660697
https://blog.csdn.net/fy573060627/article/details/52872740