为了使用spring-security强制执行https,还需要做哪些其他配置?

时间:2015-12-08 20:15:06

标签: java spring-security spring-boot

我正在尝试保护我的webapp,以便所有请求都需要使用https进行。我正在使用基于Java的配置,特别是我有一个扩展WebSecurityConfigurerAdapter的类。我尝试使用详细herehere@Override protected void configure(HttpSecurity http) {}方法配置我的安全性。

我已经尝试了配置HttpSecurity对象的这些和许多变体,以及几种身份验证变体。几乎在所有情况下,我都提出了以下问题:

[nio-8080-exec-2] o.a.coyote.http11.Http11NioProcessor : Error parsing HTTP request header

我试着对此进行一些阅读,但很多搜索结果对我来说都是死路一条。我的假设是我所引用的两个帖子中暗示的解决方案会给我大致正确的答案,但是在我可以使https工作之前还需要做任何其他配置吗?如果是的话,那是什么,如果没有,我在这里错过了什么?

以下是我当前的配置,它复制了上述错误(基本上是默认的加上https频道):

@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    // Specify the authentication mechanisms that will allow user access to the site.
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder builder) throws Exception {
        builder.inMemoryAuthentication()
            .withUser("user").password("password").roles("ROLES_USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests().anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic()
            .and()
            .requiresChannel().anyRequest().requiresSecure();
    }
}

在前端我得到SSL Connection Error : Unable to make a secure connection to the server. This may be a problem with the server, or it may be requiring a client authentication certificate that you don't have.

1 个答案:

答案 0 :(得分:0)

正如@ M.Deinum在评论中提到的那样,困难在于我没有在application.properties中配置SSL。创建一个类似于以下内容的文章:

server.port=9090
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password={password}
security.require-ssl=true

解决了这个问题。