博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot SSL
阅读量:6915 次
发布时间:2019-06-27

本文共 5581 字,大约阅读时间需要 18 分钟。

转载  

Spring Boot SSL 

SSL配置

Spring启动HTTPS配置

server.port=8443server.ssl.key-alias=selfsigned_localhost_sslserverserver.ssl.key-password=changeitserver.ssl.key-store=classpath:ssl-server.jksserver.ssl.key-store-provider=SUNserver.ssl.key-store-type=JKS

从HTTP重定向到HTTPS

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;}
 

有关如何设置整个内容的详细教程,请继续阅读。

目录

术语

在进一步讨论之前,让我们了解一些特定的术语,如SSL或TLS的含义。

SSL - 代表安全套接字层。它是通过保护在两个系统之间发送的所有敏感数据来保持互联网连接安全的行业标准协议,防止黑客读取和修改任何传输的信息。

TLS - (传输层安全性)是SSL的更新,更安全的版本。它增加了更多功能。今天,证书颁发机构提供的证书仅基于TLS。但是关于通过网络进行的安全通信,SSL这个术语仍然很常见,因为它已经很老了,并且在社区中变得很受欢迎。

当网站受SSL证书保护时,HTTPS - (超文本传输​​协议安全)出现在URL中。它是HTTP协议的安全版本。

Truststore和Keystore - 用于在Java中存储SSL证书,但它们之间没有什么区别。truststore用于存储公共证书,同时keystore用于存储客户端或服务器的私有证书。

 

创建自己的自签名SSL证书

要获得我们应用程序的SSL数字证书,我们有两个选择 -

  1. 创建自签名证书
  2. 要从证书颁发机构(CA)获取SSL证书,我们将其称为CA证书。

为了今天的演示目的,我们将创建由java keytool命令生成的自签名证书。我们需要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 - 是将存储证书和公钥/私钥的实际密钥库。这里我们使用的是 fromat - Java Key Store,还有其他格式的密钥库。

一旦我们执行上述命令,它将询问某些信息,最后这将是这样的。

keytool生成证书

关于认证生成,这就是我们所需要的。这将生成ssl-server.jks包含我们自签名证书的密钥库文件,该文件位于执行keytool命令的目录中。

要查看此密钥库中的内容,我们可以再次使用该keytool -list命令。

 
keytool -list -keystore ssl-server.jks

password为空 直接回车

keytool -list选项

 

创建Spring-boot项目并配置SSL

生成春季启动项目

创建从一个弹簧引导工程网站有依赖性WebRest Repositories。选择依赖关系并给出正确的maven GAV坐标后,我们将获得压缩格式的下载选项。下载骨架项目,解压缩然后在eclipse中导入为maven项目。

Spring启动项目生成

添加REST端点

出于测试目的,我们将使用一个简单的端点。为此,打开已经生成的Spring引导应用程序类,@SpringBootApplication并添加此代码。这将/secured在服务器中公开一个具有相对URL的休息端点。

@RestController
class 
SecuredServerController{
     
    
@RequestMapping
(
"/secured"
)
    
public 
String secured(){
        
System.out.println(
"Inside secured()"
);
        
return 
"Hello user !!! : " 
new 
Date();
    
}
}

这就是我们在应用程序中添加Web内容所需的全部内容。您可以添加更多内容,例如添加页面,图像以创建功能齐全的Web应用程序。

Spring启动SSL配置

首先,我们需要将生成的密钥库文件(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所需的全部内容。这很简单,对吧?感谢弹簧靴,让一切都变得非常轻松。

演示

现在是时候通过命令进行最终的maven构建mvn clean install并按命令启动应用程序java -jar target\ssl-server-0.0.1-SNAPSHOT.jar。这将在localhost 8443端口启动我们的安全应用程序,我们的端点url将是。

由于我们的REST端点是通过GET公开的,因此我们只能通过浏览器进行测试。转到,您将收到一些浏览器警告,例如证书未从可信证书颁发机构颁发,在浏览器中添加例外,您将从刚创建的HTTPS服务器获得响应。

浏览器输出

 

将HTTP请求重定向到HTTPS

如果您要将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并启动应用程序。测试。它会自动重定向到HTTPS安全URL。

 

@Configurationpublic class HttpsConfig {    //如果没有使用默认值80    @Value("${http.port:8443}")    Integer httpPort;    //正常启用的https端口 如443    @Value("${server.port}")    Integer httpsPort;    // springboot2 写法    @Bean    public TomcatServletWebServerFactory servletContainer() {        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {            @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(httpPort);        connector.setSecure(false);        connector.setRedirectPort(httpsPort);        return connector;    }}

按命令执行最终的maven构建mvn clean install并启动应用程序。测试它会自动重定向到HTTPS安全URL。

摘要

所以今天我们了解到,我们如何在Spring启动应用程序中启用HTTPS,并且我们已经看到了如何将HTTP流量重定向到HTTPS。我们还学会了创建自签名SSL证书。

请在评论部分将您的问题提交给我。

转载于:https://www.cnblogs.com/miracleYu/p/10306006.html

你可能感兴趣的文章
如何找到适合自己的学习方法
查看>>
Android 位置服务与GPS实时定位
查看>>
Nginx配置——用户认证
查看>>
SD卡分区及取消分区
查看>>
创建VLAN、中继链路和参与以太网捆绑的详细配置和截图
查看>>
健康的办公族作息时刻表
查看>>
新博客地址此博客不再更新baishuchao.github.io
查看>>
Git问题Everything up-to-date解决
查看>>
淘宝Tengine安装指南
查看>>
nginx-mysql-php安装配置
查看>>
div加链接 html给div加超链接实现点击div跳转的方法
查看>>
layer 旋转
查看>>
写一个算法计算n的阶乘末尾0的个数
查看>>
Java正则表达式语法大全
查看>>
apache设置自定义header
查看>>
WPS田字格的做法
查看>>
Linux账号登录安全
查看>>
Linux 基础命令 – watch
查看>>
我的友情链接
查看>>
snavigator安装步骤
查看>>