单点登录CAS测试

知识点:

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


扫描二维码关注公众号,回复: 957893 查看本文章

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


猜你喜欢

转载自blog.csdn.net/qq_40611260/article/details/80346931