我正在创建春假休息服务。我想用https保护它。
我知道使用以下解决方案:
http
.authorizeRequests()
.antMatchers("/secure/**").hasRole("ADMIN")
.anyRequest.hasRole("USER")
.and()
.requiresChannel()
.anyRequest().requiresSecure();
我可以强制使用https。但我不知道还有什么需要做的。我应该在spring security中配置其他东西还是足够了?我正在使用tomcat。我应该安装证书吗?如果是,是否有可能安装"测试证书"?它是如何工作的?
答案 0 :(得分:2)
我没有足够的代表来添加评论,因此您可能需要提供更多信息才能获得您真正想要的答案。
首先,要启用HTTPS,您将需要SSL证书。如果您只是测试/开发,则可以生成自己的自签名证书,并忽略浏览器中的证书警告。但是,如果这是面向公众的服务器,则您需要来自GoDaddy等证书颁发机构的有效SSL证书。生成SSL证书可能超出了这个问题的范围,并且有很多指南(我会发布链接,但没有足够的代表)。
您显示的配置是强制您的应用程序服务器仅通过HTTPS进行通信的有效方法,但是,仅为Tomcat服务器实际启用HTTPS是不够的。
根据您的设置,您可以使用几种不同的选项来启用HTTPS。
如果您将Spring Boot与嵌入式Tomcat服务器一起使用,则可以通过设置application.properties文件的server.ssl。*属性来启用SSL,例如:
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret
其中keystore.jks是包含SSL证书的Java密钥库的路径。有关详细信息,请参阅Spring Boot Docs。
如果您正在使用独立的Tomcat服务器,则需要修改$ CATALINA_BASE / conf / server.xml中的Tomcat的server.xml并添加SSL连接器。例如:
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"/>
此示例适用于Tomcat 7,但该过程与其他Tomcat版本类似。有关详细信息,请参阅Tomcat SSL。
如果您使用代理/负载均衡器(如NGINX),可以在那里添加SSL终端。然后,代理/负载均衡器会拦截所有HTTPS流量,并通过非HTTPS连接与应用程序服务器进行通信。这还有一个额外的好处,就是不必干扰您的应用程序服务器来执行与SSL相关的维护,例如更改证书或配置。