zoukankan      html  css  js  c++  java
  • CAS5.3版本单点登录服务器支持https请求

    cas单点登录支持https请求的设置步骤总结。

    生成ssl证书

    步骤可参考,连接中参数的说明也很全:Tomcat配置https方式访问

    直接说下我的运行命令

    keytool -genkeypair -alias cas.test.org -keyalg RSA -keystore e:\bo.keystore -storetype pkcs12
    参数说明:
    
    -genkeypair:生成一对非对称密钥并将公钥包装到X.509 v3自签名证书中;
    
    -alias:指定密钥条目的别名,该别名是公开的;
    
    -keyalg:指定加密算法,本例中的采用通用的RSA加密算法;
    
    -keystore:指定密钥库的路径及名称,若密钥库不存在则创建。若不指定则默认在操作系统的用户目录下生成一个".keystore"的文件;
    
    -storetype:指定密钥库的类型,如果不指定,默认是JKS。如果创建默认类型密钥库,命令行会提示转化为pkcs12类型,所以这里在创建时指定;
    
    注:
    
    1、执行上面命令后需要输入密钥库的口令,该口令需要配置在tomcat中,切记。
    
    2、密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等
    
    3、"名字与姓氏"应该是输入域名,而不是我们的个人姓名,其他的可以不填

    配置tomcat服务器

    打开"<tomcat安装目录>\conf\server.xml"配置文件,找到如下注释的代码行:

        <!--
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS" />
        -->

    修改为

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS"
                   keystoreFile="E:\bo.keystore"
                   keystorePass="123456" />

    修改Nacos配置

    使用https发送请求,指向cas服务

    #cas单点登录
    cas:
      prefixUrl: https://192.168.1.59:8443/cas

    修改前端

    .env.development中

    VUE_APP_CAS_BASE_URL=https://192.168.1.59:8443/cas

    sso.js 文件中不需要修改,sso文件中的http不需要修改,如果cas访问系统也要使用https协议,就需要改。

    修改后端

    为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。

    package org.jeecg.modules.cas.util;
    
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    /**
     * @Author: qiaochengqiang
     * @Date: 2021/12/24       
     * @Description: 用于进行Https请求的HttpClient
     **/
    public class SSLClient extends DefaultHttpClient {
        public SSLClient() throws Exception{
            super();
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,
                                               String authType) throws CertificateException {
                }
                @Override
                public void checkServerTrusted(X509Certificate[] chain,
                                               String authType) throws CertificateException {
                }
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            ClientConnectionManager ccm = this.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme("https", 443, ssf));
        }
    }

    CASServiceUtil.java,直接使用上边编写的类生成client

    /**
         * 验证ST
         */
        public static String getSTValidate(String url,String st, String service){
            try {
                url = url+"?service="+service+"&ticket="+st;
                //CloseableHttpClient httpclient = createHttpClientWithNoSsl();
                CloseableHttpClient httpclient = new SSLClient();
                HttpGet httpget = new HttpGet(url);
                HttpResponse response = httpclient.execute(httpget);
                String res = readResponse(response);
                return res == null ? null : (res == "" ? null : res);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "";
        }
  • 相关阅读:
    【洛谷6620】[省选联考 2020 A 卷] 组合数问题(下降幂)
    【AtCoder】AtCoder Grand Contest 033 解题报告
    【AtCoder】AtCoder Grand Contest 034 解题报告
    【洛谷5445】[APIO2019] 路灯(树套树)
    【LOJ6059】「2017 山东一轮集训 Day1」Sum(倍增优化数位DP+NTT)
    【LOJ6159】「美团 CodeM 初赛 Round A」最长树链(树的直径)
    重新入门的Polya定理
    【洛谷6105】[Ynoi2010] y-fast trie(set)
    【BZOJ4480】 [JSOI2013] 快乐的jyy(回文自动机裸题)
    【LOJ6172】Samjia 和大树(树形DP+猜结论)
  • 原文地址:https://www.cnblogs.com/qcq0703/p/15728591.html
Copyright © 2011-2022 走看看