(四)启用HTTPS

2018-09-19 02:47:19来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

  安全规范中有一条是要求尽量使用https而弃用http(新Chrome将标记非HTTPS网站为不安全),其实启用https和之前的ipv6改造一样,并不是什么高难度或者工作流繁多的的改造,只需将中间件启用https支持即可,当然步骤也想当简单的分为三个步骤:关闭中间件、启用HTTPS、启动中间件。但在我们的spring cloud项目中,基本上都是使用内置的中间件(tomcat、netty等),下面记录下改造的思路:

方案1: 服务均启用https,步骤有:

  1. 所有的micro service均启用https
  2. 把seureka的注册地址改为https方式
  3. 把config service的注册地址改为https方式
  4. 把feign的调用方式改为支持https方式
  5. 每个micro service均需导入证书,并且访问的时候需要导入证书(不然会报unable to find valid certification path to requested target错误)
  6. 证书里需要把micro service的serviceId注册进去(不然会报Certificate doesn't match any of the subject alternative names错误)

方案比较稳妥,所有服务中均走了ssl,满足安全条件,就是乍一看改造量有点多啊......

方案2:micro service只会暴露gateway,其余服务均是不暴露的,因此我们可以只改造gateway服务,步骤有:

  1. gateway service启用https
  2. gateway service改造lb://micro_service_id的地址替换方式

该方案改造了最小,且由于spring cloud的服务隔离的关系,并无需担心其余服务的安全问题。


 

实现方案:

  1. spring cloud gateway项目启用https(其实也就是spring boot项目启用https),只需要在application.yml里增加ssl配置即可。

server:
  port: 443
  ssl:
    key-alias: ncdt
    enabled: true
    key-store-password: password
    key-store-type: JKS
    key-store: ncdt.keystore

  2.spring cloud gateway项目增加filter

/**
 * @author zhangqiuyang
 * Created on 2018/8/9.
 */
@Order(10101)
@Configuration
public class HttpsFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        Object uriObj = exchange.getAttributes().get(GATEWAY_REQUEST_URL_ATTR);
        if (uriObj != null) {
            URI uri = (URI) uriObj;
            uri = this.upgradeConnection(uri);
            exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri);
        }
        return chain.filter(exchange);
    }

    private URI upgradeConnection(URI uri) {
        UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUri(uri).scheme("http");
        if (uri.getRawQuery() != null) {
            uriComponentsBuilder.replaceQuery(uri.getRawQuery().replace("+", "%20"));
        }
        return uriComponentsBuilder.build(true).toUri();
    }
}

改造就完成了,重启服务就可以看到效果。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java对象的浅克隆和深克隆

下一篇:String系列