Spring Boot如何实现基于X.509 PKI的HTTPS SSL免密登录?
- 内容介绍
- 文章标签
- 相关推荐
本文共计792个文字,预计阅读时间需要4分钟。
为了让项目实现SSL免密登录,首先需要开启HTTPS。以下是开启Spring Boot项目HTTPS的步骤:
1. 创建服务端证书:为了开启HTTPS,我们需要一个证书。在实际开发中,通常会在网上申请一个机构证书,但这里我们使用自签名证书作为示例。
2. 配置Spring Boot项目以使用HTTPS: - 在`application.properties`或`application.yml`中配置以下内容: properties server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=yourPassword server.ssl.key-alias=yourKeyAlias server.ssl.key-password=yourKeyPassword server.ssl.trust-store=classpath:truststore.p12 server.ssl.trust-store-password=yourTrustStorePassword - 上述配置中,`keystore.p12`、`truststore.p12`是存储证书的文件,`yourPassword`、`yourTrustStorePassword`是证书的密码,`yourKeyAlias`是证书别名,`yourKeyPassword`是私钥密码。
3. 修改代码以支持SSL连接: - 在Spring Boot的配置类中,添加以下代码来配置SSL上下文: java @Bean public SSLContext sslContext() throws Exception { KeyStore keyStore=KeyStore.getInstance(PKCS12); keyStore.load(new FileInputStream(classpath:keystore.p12), yourPassword.toCharArray()); KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, yourKeyPassword.toCharArray()); TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext sslContext=SSLContext.getInstance(TLS); sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom()); return sslContext; } - 在`WebMvcConfigurer`中,添加以下代码来配置`ServerHttpSecurity`: java @Override public void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests().anyRequest().authenticated() .and() .formLogin().and() .httpBasic() .and() .addFilterBefore(new SSLFilter(sslContext), BasicAuthenticationFilter.class); } - 其中,`SSLFilter`是一个自定义的过滤器,用于在请求过程中添加SSL上下文。
4. 运行Spring Boot项目,现在项目已经开启了HTTPS,可以通过访问`https://localhost:8443`来访问项目。
注意:在实际开发中,建议使用正规机构颁发的证书,以提高安全性。
要让项目实现 ssl 免密登录,首先需要开启 settings/security 中,选择 受信任的根证书颁发机构 导入 rootCA.crt
这时启动项目,就可以使用 settings/security 选择 个人证书 把 shurlormes.p12 导入,期间会要你输入它的密码。
这时候刷新页面,浏览器就会弹出一个对话框,让你选择个人认证了。
Spring Boot获取个人证书信息
恭喜你,到了这一步, pki 登录已经完成了 99% 了。接下来就是通过 request 获取证书信息,然后处理字符串,拿到用户名做登录即可。
@RequestMapping("/login") public String login(HttpServletRequest request) { X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); if(certs != null) { X509Certificate gaX509Cert = certs[0]; String dn = gaX509Cert.getSubjectDN().toString(); System.out.println("个人证书信息:" + dn); String username = ""; String[] dnArray = dn.split(","); for (String dnItem : dnArray) { String[] dnInfo = dnItem.split("="); String key = dnInfo[0]; String value = dnInfo[1]; if("cn".equalsIgnoreCase(key.trim())) { username = value; break; } } System.out.println("用户名:" + username); if(!StringUtils.isEmpty(username)) { SecurityContext securityContext = SecurityContextHolder.getContext(); User userDetails = new User(username, "", Collections.EMPTY_LIST); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, "", Collections.EMPTY_LIST)); return "redirect:/"; } } return "login"; }
Spring Boot 同时开启github.com/Shurlormes/pkilogin
参考资料
www.baeldung.com/x-509-authentication-in-spring-security
到此这篇关于Spring Boot 实现https ssl免密登录(X.509 pki登录)的文章就介绍到这了,更多相关Spring Boot https ssl免密登录内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计792个文字,预计阅读时间需要4分钟。
为了让项目实现SSL免密登录,首先需要开启HTTPS。以下是开启Spring Boot项目HTTPS的步骤:
1. 创建服务端证书:为了开启HTTPS,我们需要一个证书。在实际开发中,通常会在网上申请一个机构证书,但这里我们使用自签名证书作为示例。
2. 配置Spring Boot项目以使用HTTPS: - 在`application.properties`或`application.yml`中配置以下内容: properties server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=yourPassword server.ssl.key-alias=yourKeyAlias server.ssl.key-password=yourKeyPassword server.ssl.trust-store=classpath:truststore.p12 server.ssl.trust-store-password=yourTrustStorePassword - 上述配置中,`keystore.p12`、`truststore.p12`是存储证书的文件,`yourPassword`、`yourTrustStorePassword`是证书的密码,`yourKeyAlias`是证书别名,`yourKeyPassword`是私钥密码。
3. 修改代码以支持SSL连接: - 在Spring Boot的配置类中,添加以下代码来配置SSL上下文: java @Bean public SSLContext sslContext() throws Exception { KeyStore keyStore=KeyStore.getInstance(PKCS12); keyStore.load(new FileInputStream(classpath:keystore.p12), yourPassword.toCharArray()); KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, yourKeyPassword.toCharArray()); TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext sslContext=SSLContext.getInstance(TLS); sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom()); return sslContext; } - 在`WebMvcConfigurer`中,添加以下代码来配置`ServerHttpSecurity`: java @Override public void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests().anyRequest().authenticated() .and() .formLogin().and() .httpBasic() .and() .addFilterBefore(new SSLFilter(sslContext), BasicAuthenticationFilter.class); } - 其中,`SSLFilter`是一个自定义的过滤器,用于在请求过程中添加SSL上下文。
4. 运行Spring Boot项目,现在项目已经开启了HTTPS,可以通过访问`https://localhost:8443`来访问项目。
注意:在实际开发中,建议使用正规机构颁发的证书,以提高安全性。
要让项目实现 ssl 免密登录,首先需要开启 settings/security 中,选择 受信任的根证书颁发机构 导入 rootCA.crt
这时启动项目,就可以使用 settings/security 选择 个人证书 把 shurlormes.p12 导入,期间会要你输入它的密码。
这时候刷新页面,浏览器就会弹出一个对话框,让你选择个人认证了。
Spring Boot获取个人证书信息
恭喜你,到了这一步, pki 登录已经完成了 99% 了。接下来就是通过 request 获取证书信息,然后处理字符串,拿到用户名做登录即可。
@RequestMapping("/login") public String login(HttpServletRequest request) { X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); if(certs != null) { X509Certificate gaX509Cert = certs[0]; String dn = gaX509Cert.getSubjectDN().toString(); System.out.println("个人证书信息:" + dn); String username = ""; String[] dnArray = dn.split(","); for (String dnItem : dnArray) { String[] dnInfo = dnItem.split("="); String key = dnInfo[0]; String value = dnInfo[1]; if("cn".equalsIgnoreCase(key.trim())) { username = value; break; } } System.out.println("用户名:" + username); if(!StringUtils.isEmpty(username)) { SecurityContext securityContext = SecurityContextHolder.getContext(); User userDetails = new User(username, "", Collections.EMPTY_LIST); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, "", Collections.EMPTY_LIST)); return "redirect:/"; } } return "login"; }
Spring Boot 同时开启github.com/Shurlormes/pkilogin
参考资料
www.baeldung.com/x-509-authentication-in-spring-security
到此这篇关于Spring Boot 实现https ssl免密登录(X.509 pki登录)的文章就介绍到这了,更多相关Spring Boot https ssl免密登录内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

