cas 在 反向代理环境中的https 配置

cas 推荐是在https 环境中使用,之前说的只是在http环境中,配置的https 与http 大体上都是一致。 今天使用https 进行配置。

1、证书的颁发

2、服务端的配置。

3、客户端配置。

有问题欢迎学习交流。

  • 描述

    • user>Switch 用户端使用的是http(s),也就是两者并行
    • Switch 只是做端口转发,不做其他的处理
    • LBS 中配置了ssl 证书,并且做反向代理,支持http与https两种方式,
    • LBS>Server 都是使用的http ,也就是说server 中的服务不做ssl处理
    • -

- 存在的问题就是:因为在内外中都是使用的http ,所以tomcat 中不能获获取到https,仅仅能获取到http://SERVER_HOST: PORT/xxx ,这样的请求地址,会导致server 中地址解析异常。

1. 证书安装

linux 下nginx与openssl 搭建https 服务器 subversion https 服务器 如果有其他问题可以直接百度,有很多相关的资料的

在nginx 配置中添加 添加的原因 在后面的tomcat配置中。

- proxy_set_header x-real-ip remoteaddr;?proxysetheaderx?forwarded?forproxy_add_x_forwarded_for;

- proxy_set_header x-forwarded-host serveraddr;?proxysetheaderx?forwarded?portserver_port;

- proxy_set_header x-forwarded-proto https;

2、服务端配置

  • 服务端的配置相对来说比较简单,就是将修改为http 的修改回去就好了

   WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

   <!--  TODO 这里将 cookieSecure 修改为了false ,目的是使用http  -->
    <bean id="ticketGrantingTicketCookieGenerator"
    class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
          c:casCookieValueManager-ref="cookieValueManager"
          p:cookieSecure="true"
          p:cookieMaxAge="-1"
          p:cookieName="TGC"
          p:cookiePath=""/>
  • 认证处理配置 WEB-INF/deployerConfigContext.xml
     <!--  TODO 这里设置 p:requireSecure="false" 目的是为了使用http   -->
        <bean id="proxyAuthenticationHandler"
              class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
              p:requireSecure="false"
              p:httpClient-ref="supportsTrustStoreSslSocketFactoryHttpClient" />

3、客户端配置

客户端主要的是配置就是web.xml,里面修改相应的地址就好了.但是 SingleSignOutFilter 与 Cas20ProxyReceivingTicketValidationFilter 的配置 casServerUrlPrefix 不要修改, 原因是casserver 与server 是处于内容之中,内网中使用的是http 的方式,不存在http 的访问方式。所以不能使用https 的方式访问,如果将证书放在tomcat 下,这个配置也是需要修改的。

<filter>
        <!-- 判断用户时候进行登录的,没有今登陆将跳转到casServerLoginUrl页面进行登录,这里手动实现了一下,用于登出 -->
        <filter-name>CAS Authentication Filter</filter-name>
        <!--<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>-->
        <filter-class>com.ym.system.filter.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://test.com/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>casServerLogoutUrl</param-name>
            <param-value>https://test.com/cas/logout</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>test.com</param-value>
        </init-param>
        <init-param>
            <param-name>ignorePattern</param-name>
            <param-value>^.*[.](js|css|gif|png|zip)$</param-value>
        </init-param>
    </filter>

     <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>http://test.com/cas</param-value>
            <!-- cas server 端地址的配置。 这个主要是用户登出用的  -->
        </init-param>
    </filter>
    <filter>
        <!-- 用于进行ticket认证 -->
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <!-- ticket 认证的地址,这里配置的是内网地址-->
            <param-name>casServerUrlPrefix</param-name>
            <param-value>http://127.0.0.1:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>test.com</param-value>
        </init-param>
        <init-param>
            <param-name>redirectAfterValidation</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>acceptAnyProxy</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>useSession</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>

客户端与服务端配置就这么多。

- 在上面的架构中,服务器是不能获取到外网请求的信息的,所以我们需要在lbs 上进行处理。也就是前面提到的nginx 添加的参数,但是仅仅有那个参数是不行的,还需要在tomcat中进行配置。

- 在tomcat 的server.xml 中添加RemoteIpValve ,目的是在使用代理的时候,获取代理的头中的配置信息,这样tomcat 就能获取到正确的请求地址,不会造成混乱。

      <Valve className="org.apache.catalina.valves.RemoteIpValve"
             remoteIpHeader="x-forwarded-for"
            remoteIpProxiesHeader="x-forwarded-by"
            protocolHeader="x-forwarded-proto"
       />

nginx 配置实例

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status<$sent_http_location> $body_bytes_sent   "$http_referer" ‘
                      ‘"$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            autoindex on;   # 显示目录
            autoindex_exact_size on;    # 显示文件大小
            autoindex_localtime on; # 显示文件时间
        }

        location /cas {
            proxy_pass   http://127.0.0.1:8443;
        }

        location /ym1 {

            proxy_set_header   Host   $host;
            proxy_set_header   Referer $http_referer;
            proxy_set_header   Cookie $http_cookie;
            proxy_set_header   X-Real-IP  $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-FORWARDED-HOST $server_addr;
            proxy_set_header   X-FORWARDED-PORT $server_port;
            proxy_set_header   x-forwarded-proto http;

            proxy_pass   http://127.0.0.1:8080;
        }

        location /ym2 {

            proxy_set_header   Host   $host;
            proxy_set_header   Referer $http_referer;
            proxy_set_header   Cookie $http_cookie;
            proxy_set_header   X-Real-IP  $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-FORWARDED-HOST $server_addr;
            proxy_set_header X-FORWARDED-PORT $server_port;
            proxy_set_header   x-forwarded-proto http;

            proxy_pass   http://127.0.0.1:8081;
        }
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    # HTTPS server
    #
    server {
        listen       443;
        server_name  localhost;

        ssl on ;

        ssl_certificate      test.crt;
        ssl_certificate_key  test_nopass.key;

        # ssl_session_timeout 5m;
        # ssl_session_cache    shared:SSL:1m; 

        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

       location / {
            root   html;
            index  index.html index.htm;
            autoindex on;   # 显示目录
            autoindex_exact_size on;    # 显示文件大小
            autoindex_localtime on; # 显示文件时间
        }

        location /cas {
            proxy_pass   http://127.0.0.1:8443;
        }

        location /ym1 {

            proxy_set_header   Host   $host;
            proxy_set_header   Referer $http_referer;
            proxy_set_header   Cookie $http_cookie;
            proxy_set_header   x-real-ip  $remote_addr;
            proxy_set_header   x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header   x-forwarded-host $server_addr;
            proxy_set_header   x-forwarded-port $server_port;
            proxy_set_header   x-forwarded-proto https;

            proxy_pass   http://127.0.0.1:8080;
        }

        location /ym2 {

            proxy_set_header   Host   $host;
            proxy_set_header   Referer $http_referer;
            proxy_set_header   Cookie $http_cookie;
            proxy_set_header   x-real-ip  $remote_addr;
            proxy_set_header   x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header   x-forwarded-host $server_addr;
            proxy_set_header   x-forwarded-port $server_port;
            proxy_set_header   x-forwarded-proto https;

            proxy_pass   http://127.0.0.1:8081;
        }
    }

}


相关技术网站:

- Handling X-FORWARDED-PROTO in java apache-tomcat

- tomcat RemoteIpValve API

- tomcat架构分析(valve机制)

时间: 2024-08-07 18:20:30

cas 在 反向代理环境中的https 配置的相关文章

nginx 反向代理 与 Apache backend的配置联合配置

nginx 反向代理 与 Apache backend的配置联合配置: 说明: nginx 将http映射到Apache上的特定子目录. 配置方法步骤: 1.  设置域名, 子域名映射到指定服务器ip, 2. nginx设置好server ,以及对应的目录, 或者 转发到指定Apache端口. server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/ht

Netsreen NSRP环境中如何同步配置

NSRP环境中如何同步配置 环境: 1.FW1为主设备 2.FW2为从设备 3.确定FW1上的配置为当前正常工作 以下命令在FW2上执行: nsisg2000(B)-> exec nsrp sync global save 随后将出现以下输出: nsisg2000(B)-> load peer system config to save Save global configuration successfully. Continue to save local configurations .

haproxy反向代理环境部署(http和https代理)

操作背景:前方有一台haproxy代理机器(115.100.120.57/192.168.1.7),后方两台realserver机器(192.168.1.150.192.168.1.151,没有公网ip,部署了很多站点)将域名解析到haproxy机器的公网ip,在haproxy配置文件里,根据域名转发至后端realserver上. haproxy代理配置:根据域名进行转发(即后端机器不管部署多少个域名,都可以直接在haproxy配置文件里通过域名对域名方式直接指定)nginx代理配置:根据端口进

haproxy反向代理环境部署

之前介绍过nginx反向代理和负载均衡的部署,今天这里介绍下haproxy反向代理的部署过程. 背景:前方有一台haproxy代理机器(有公网ip),后方两台realserver机器(没有公网ip,部署了很多站点)将域名解析到haproxy代理机器的公网ip,在haproxy配置文件里,根据域名转发至后端realserver上. haproxy代理:根据域名进行转发(直接是域名对域名)nginx代理:根据端口进行转发(一个域名对于后端realserver的一个端口,多个域名就对于多个端口)

Nginx 反向代理 负载均衡 虚拟主机配置

通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常用配置的说明.即学即用,你还在等什么?一睹为快先了解Nginx的三大功能Nginx 可以作为一台http服务器.可以做网站静态服务器,比如图片服务器,高效,减轻服务器压力.同时它也支持https服务.Nginx 可以配置多台虚拟主机.可以实现在一台服务器虚拟出多个网站效果,省钱.Nginx 最重要的是反向代理,负载均衡.在服务器集群中,Ngin

Nginx的安装以及反向代理和负载均衡的配置

环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3台linux系统 虚拟机一:192.168.1.20 (Nginx反向代理和负载均衡服务器,系统kali linux) 虚拟机二:192.168.1.19 (node服务器一,系统ubuntu 17.10) 虚拟机三:192.168.1.22(node服务器二,系统ubuntu 17.10) 环境需要的程序 git Node Nginx pm2 首先环境的搭建,由于这三台电脑都是我刚刚虚拟出来的,所以什么环境都没有! 虚拟机一

反向-代理 nginx for Mac 的配置以及使用

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器. sudo nginx 开启 sudo nginx -s reload  重启 sudo nginx -s stop  关闭注意:每次的修改配置文件都需要重启nginx nginx.conf 中文件配置修改 本地请求接口的前缀下图中的base_url = 本

Linux环境中GitHub的配置与简单使用教程

一.环境 1.1 操作系统(其他发行版亦可): [[email protected] ~]# cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) 1.2 Git版本: [[email protected] ~]# git --version git version 1.8.3.1 二.步骤 2.1 下载并安装Git软件. [[email protected] ~]# yum -y install git 2.2 创建SSH k

生产环境中tomcat的配置

生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/shutdown.sh来关闭tomcat. 而在生产环境中,我们要配置tomcat使其以daemon方式运行,这是因为: 以daemon运行不受终端影响,不会因为退出终端而停止运行 可以让tomcat以普通用户身份运行,可以让tomcat随linux启动而启动 如何将tomcat配置成守护进程 将tom