演示项目源码下载:(访问密码:9987)
spring-boot-ssl-server.zip
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
truststore
用于存储公共证书,而keystore
用于存储客户端或服务器的私有证书。对于今天的演示目的,我们将创建由 javakeytool
命令生成的自签名证书。我们需要keytool -genkey
从命令提示符运行命令。
这是我们将使用的确切命令 -
keytool -genkey -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -validity 700 -keypass changeit -storepass changeit -keystore ssl-server.jks
让我们理解上面的命令——
-genkey
– 是用于生成证书的 keytool 命令,实际上 keytool 是一个多用途且强大的工具,它有多个选项-alias selfsigned_localhost_sslserver
– 表示证书的别名,用于 SSL/TLS 层-keyalg RSA -keysize 2048 -validity 700
– 是指示加密算法、密钥大小和证书有效性的自描述参数。-keypass changeit -storepass changeit
– 是我们信任库和密钥库的密码-keystore ssl-server.jks
– 是存储证书和公钥/私钥的实际密钥库。这里我们使用JKS fromat – Java Key Store,还有其他格式的密钥库。一旦我们执行了上面的命令,它会询问某些信息,最后看起来像这样。
生成证书的keytool
这就是我们目前需要的关于认证生成的全部内容。这将ssl-server.jks
在执行 keytool 命令的目录中生成包含我们自签名证书的密钥库文件。
要查看此密钥库中的内容,我们可以再次使用如下keytool -list
命令。
keytool -list -keystore ssl-server.jks
输出将类似于 –
keytool -list 选项
Web
和Rest Repositories
. 选择依赖项并提供正确的 maven GAV 坐标后,我们将获得压缩格式的下载选项。下载骨架项目,解压,然后在eclipse中作为maven项目导入。出于测试目的,我们将使用一个简单的REST端点。为此,请打开已生成的带有注释的 Spring Boot 应用程序类@SpringBootApplication
并添加此代码。这将/secured
在服务器中公开一个具有相对 URL 的休息端点。
@RestController
class SecuredServerController{
@RequestMapping("/secured")
public String secured(){
System.out.println("Inside secured()");
return "Hello user !!! : " + new Date();
}
}
这就是我们在应用程序中添加 Web 内容所需的全部内容。您可以添加更多像添加页面、图像来创建功能齐全的 Web 应用程序。
首先,我们需要将生成的密钥库文件 ( ssl-server.jks
)复制到resources
文件夹中,然后打开application.properties
并添加以下条目。
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
这就是我们启用 https 所需的全部内容。这很容易,对吧?感谢 spring boot 让一切变得很容易。
mvn clean install
启动应用程序了java -jar target\ssl-server-0.0.1-SNAPSHOT.jar
。这将在localhost 8443
端口中启动我们的安全应用程序,我们的端点 url 将是https://localhost:8443/secured。如果您想将 HTTP 流量重定向到 HTTPS,则这是一个可选步骤,以便整个站点变得安全。要在 spring boot 中做到这一点,我们需要在8080
端口添加 HTTP 连接器,然后我们需要设置重定向端口8443
。这样任何8080
通过 http 的请求,都会自动重定向到8443
https。
为此,您只需要添加以下配置。
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
通过命令执行最终的 maven 构建mvn clean install
并启动应用程序。测试http://localhost:8080/secured。它将自动重定向到 HTTPS 安全 URL。
演示项目源码下载:(访问密码:9987)
spring-boot-ssl-server.zip
https://www.leftso.com/article/872.html