Java笔记-Spring Boot SSL(https)实例

此篇博文记录了在web程序中使用自签名的SSL(HTTPS)证书及创建SSL认证。

 

SSL关键的配置

Spring Boot中HTTPS的配置(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

将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:安全套接字层(Secure Sockets Layer)。此协议用于两个系统网络连接和传输时对数据的加密。传输过程中防止了黑客的读取和窜改。

TLS:传输层安全(Transport Layer Security)相对于SSL更加的安全,相当于SSL的升级版。目前所有的ca(certificate authorities)机构都是基于TLS的,但是目前在互联网上SSL更加流行。

HTTPS:超文本传输协议安全(Hyper Text Transfer Protocol Secure)在web网站上使用了SSL。这样会比HTTP更加安全。

信任库及密钥库(Truststore and Keystore):这两个库都是存储了SSL证书。truststore存储了公钥信息,keystore存储私钥信息。

 

下面是创建自签名证书

keytool -genkey -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -validity 700 -keypass changeit -storepass changeit -keystore ssl-server.jks

解析下:

-genkey:生成证书;

-alias selfsigned_localhost_sslserver:设置证书的别名;

-keyalg RSA -keysize 2048 -validity 700:truststore和keystore的密码;

-keystore ssl-server.jks:存储密钥的文件。其中JKS的含义是Java Key Store

执行完上面的代码后,会询问一些问题如下:

查看jks中的证书信息:

 

下面是关于程序方面的内容

添加RESTful接口

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

将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

这样Spring Boot就配置好HTTPS了

url输入https://localhost:8443/secured

就进入了https站点了

将HTTP重定向到HTTPS

将8080端口重定向到8443上面:

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

源码打包下载地址:

https://github.com/fengfanchen/Java/tree/master/ssl-server

 

©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值