SpringBoot CAS单点登录客户端报SSL证书错误

登录后报
ValidatorException: PKIX path building failed
SunCertPathBuilderException: unable to find valid certification path to requested target

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
	at sun.security.validator.Validator.validate(Validator.java:262)
	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1596)
	... 60 common frames omitted
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)
	... 66 common frames omitted

https

https图解

应该在 validate crt 环节出问题了

思路

一、导证书到jre环境
二、服务器不信任我们自己创建的证书,所以在代码中忽略证书信任问题。

忽略证书信任问题

使用空Filter,使用JVM在加载类的时候,执行SSL连接设置,忽略 SSL 证书问题。
涉及 HttpsURLConnection 的默认 SLLSocketFactoryHostnameVerifier

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

过滤器代码

**
 * @author huangliuyu
 * @description 忽略ssl认证过滤器
 * @date 2019-01-09
 */
public class IgnoreSSLValidateFilter implements Filter {
 	static {
 		//执行设置,禁用ssl认证 
        try {
            TrustManager[] trustAllCerts = {new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                        throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                        throws CertificateException {
                }
            }};
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    }




    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {    
       chain.doFilter(request, response);
    }

	public void destroy() {
	}

    public void init(FilterConfig config) throws ServletException {
    }
}

Spring Boot 使用过滤器

/**
 * @author huangliuyu
 * @description 过滤器配置类
 * @date 2019-01-09
 */
@Configuration
@Component
public class FilterConfig {

    @Bean
    public FilterRegistrationBean ignoreSSLValidateFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new IgnoreSSLValidateFilter());
        registrationBean.setName("ignoreSSLValidateFilter");
        //过滤器顺序
        registrationBean.setOrder(0);
        //拦截规则
        registrationBean.setUrlPatterns(Arrays.asList("/*")); 
        return registrationBean;

    }

}

参考:http://www.cnblogs.com/longshiyVip/p/5067489.html

### 回答1: Spring Boot CAS 单点登录是一种基于CAS(Central Authentication Service)的单点登录解决方案,它可以实现多个应用系统之间的用户认证和授权,用户只需要登录一次,就可以访问所有的应用系统。Spring Boot CAS 单点登录的实现过程中,需要使用CAS Server 和 CAS Client,CAS Server 负责用户认证和授权,CAS Client 负责将用户的认证信息传递给应用系统。Spring Boot CAS 单点登录的优点是可以提高用户体验,减少用户的登录次数,提高系统的安全性。 ### 回答2: Spring Boot是一种流行的Java Web应用框架,它能够快速构建高效的Web应用程序。在现代Web应用程序中,用户身份认证和访问授权是至关重要的部分。这就为单点登录(SSO)技术提供了一个重要的背景。 CAS(Central Authentication Service)是一种功能强大的SSO协议,被广泛应用于大型企业的身份认证系统中。CAS允许用户在一个系统上登录,即可在其他系统中无需重新输入用户名和密码即可访问这些系统。CAS协议以CAS Server作为核心,来处理用户的身份认证。因此,Spring Boot与CAS Server联合使用,可以构建出一个高效的单点登录系统。 在实际应用中,Spring Boot应用程序既可以作为CAS Server,也可以作为CAS Client。如果是作为CAS Server,需要引入Spring Security CAS Starter;如果是作为CAS Client,则需要引入Spring Cloud Security CAS Starter。这两个Starter都非常容易使用,只要按照文档中的步骤配置即可。 在CAS SSO系统中,用户首先在CAS Server登录,然后CAS Server会为用户颁发一个Ticket。接下来,用户访问其他CAS Client系统时,该系统会将Ticket发送到CAS Server进行验证。验证通过后,CAS Server将发出身份验证成功的消息,该系统便可以为用户提供访问授权。 总之,使用Spring Boot和CAS Server实现SSO系统,可以节省用户的时间和精力,并增强Web应用程序的安全性。Spring Boot和CAS Server的联合使用,对于构建任何规模的企业应用程序都非常适用。 ### 回答3: CAS(Central Authentication Service)是一种单点登录(Single Sign-On,SSO)协议,可以实现多个应用系统之间的用户认证和授权信息共享。Spring Boot是一种快速开发应用程序的框架,它可以帮助开发者快速构建基于CAS单点登录应用。本文将介绍如何使用Spring Boot和CAS实现单点登录。 1. 配置CAS服务器 首先要从CAS官网上下载和安装CAS服务器,安装完成后,需要对CAS进行一些配置。主要包括以下几步: 设置CAS服务器的主机名和端口号; 配置CAS服务器的认证协议; 配置CAS服务器的用户管理模块; 配置CAS服务器的客户端应用权限。 2. 配置CAS客户端 接下来需要配置CAS客户端来与CAS服务器进行通信。配置CAS客户端需要以下步骤: 设置CAS客户端的应用名称; 配置CAS客户端的访问路径; 配置CAS客户端认证协议。 3. 集成Spring Boot和CAS 使用Spring Boot可以极大地简化项目的开发和部署,因此需要将CAS集成到Spring Boot中。主要步骤如下: 在pom.xml文件中添加CAS的依赖项; 配置Spring Boot应用程序以与CAS进行集成; 编写CAS登录和注销的控制器。 4. 使用CAS实现单点登录 CAS单点登录的核心功能是,用户在一个客户端应用程序中登录,然后在使用其他客户端应用程序时,无需再次输入用户名和密码。要实现这一功能,需要以下步骤: 设置CAS客户端的应用程序之间的信任关系; 配置CAS客户端CAS服务器之间的票据传递; 在Spring Boot应用程序中创建自定义过滤器。 总之,Spring Boot和CAS集成可以帮助开发者快速实现单点登录应用程序。借助CAS的优势,可以实现多个应用程序之间的用户认证和授权信息共享,提高应用程序的安全性和用户体验。同时,Spring Boot的高效开发和部署能力,可以让开发者轻松应对复杂的CAS单点登录应用程序开发和部署过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值