文档章节

Spring cloud 微服务安全解决方案

netkiller-
 netkiller-
发布于 2017/10/21 15:56
字数 1088
阅读 910
收藏 51
点赞 0
评论 3

Spring boot 微服务安全解决方案

作者:netkiller

本文节选自《Netkiller Architect 手札》

Restful 的通信安全有很多中解决方案,例如

    1. HTTP Basic Auth 认证
    2. Cooke / Session 认证
    3. Token 认证
    4. Oauth
    5. OpenID

等等

每一种方案都很成熟,这里不依依解释,如果不了解,请去搜索引擎查找相关资料

这里我谈谈在实施微服务项目中的心得,首先项目采用 Spring cloud 方案,Spring cloud 有自己的RestController 控制器,我们需要遵循他的规范开发,这就限制了很多传统的认证加密方法不能应用到 Spring cloud中。

例如传统restful 使用 POST 方式提交,POST 数据格式如下:
 name=Neo&age=23&md5=xxxxxxx  
然后做 token 校验。

而 Spring cloud 使用 raw 格式的数据做POST提交,例如
@RequestMapping(value = "/member/create", method = RequestMethod.POST)  
public void create(@RequestBody Member member)
我们不想在Spring框架上做额外的改动,又想解决信息的安全问题。

应用层加密与传输层加密,我更趋向传输层加密。

因为应用层加密也破坏了 Spring cloud的风格,应用层加是指通过非对称密钥将数据加密,然后通过POST发送到服务器端,服务器端获取数据后解密,在反序列化。这种做法有很多缺陷:

  1. 需要用户自己处理加密与机密
  2. 加密数据通常需要BASE64编码后传输,增加了数据体积。
  3. 不同语言间处理方式存在差异,略有不同。例如有些系统使用JKS格式的证书,有些使用PEM,P12 等等。需要开发者自己转换,比较复杂。

而传输层加密由Web服务器完成,与开发无关。

 

第一个阶段采用 HTTP Basic Auth

这个方案简单,实施起来最为方便,因为项目比较紧急,所以就采用了这个方案,这个方案既可以在运维方处理,也可以在开发方处理,对于 Spring boot 只需引入Spring Security 简单配置,立即生效。

实现方式请参考:

Spring boot with Spring security

http://www.netkiller.cn/java/spring/boot/security.html

第二阶段 HTTP Basic Auth + SSL

上面的方案适合在防火墙内部的服务器间通信,如果跨机房或者在广域网上就不在安全了,通过嗅探器抓包,包括 http basic auth 的用户和密码,以及接口数据没有安全可言。
为Web 服务器增加 SSL 证书,可以解决信息安全问提。

证书可以使用CA机构颁发的证书,也可以自己生成证书。

证书可以配置在Web服务器上如Nginx, 实现方式请参考:
http://www.netkiller.cn/www/nginx/conf.html#http2

也可以配置在 Spring boot 中, 实现方式请参考:

Spring boot with HTTPS SSL

http://www.netkiller.cn/java/spring/boot/https.html

这个方案我们使用了很长一段时间,大家都不想再改动和优化现有的项目,可以满足绝大部分用户的需求.


第三阶段 Oauth

由于需要为手机端提供 restful 服务,之前的方式已经不能满足我们的需求,之前的方式更适合提供私有服务,不适合提供公共服务。所谓私有服务是指它的使用范围限制在企业内部,或者事业部间共享服务,总的来说可以通过防火墙控制服务区域。

对于公共服务 OpenID/Oauth 更适合,我们不关心用户地理位,终端设备的情况。实现方式请参考:

实现方式请参考:

Spring boot with Oauth2

http://www.netkiller.cn/java/spring/boot/oauth2.html

第四阶段,终极版诞生,SSL使用双向认证

这样就具备了:

    1. SSL 双向认证
    2. HTTP Basic Auth 认证
    3. Oauth2 认证

这是我们最终的方案,双向认证是服务器与客户端两端都需要证书才能通信。
App(IOS/Android) -->  SSL 双向认证 --> SLB/Proxy --> Feign Client 

 

 

© 著作权归作者所有

共有 人打赏支持
netkiller-

netkiller-

粉丝 667
博文 240
码字总数 322337
作品 10
深圳
部门经理
加载中

评论(3)

哎码
哎码
依依是谁?
哎码
哎码
依依是谁?
哎码
哎码
依依是谁?
关于Spring Cloud的核心特性

SOA和微服务的区别 其实服务化架构已经可以解决大部分企业的需求了,那么我们为什么要研究微服务呢?先说说它们的区别; 微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个...

itcloud ⋅ 05/23 ⋅ 0

微服务选择Spring Cloud还是Dubbo?

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 在阿里巴巴的生态中,微服务逐渐成为主要的服务形态,伴随着容器...

异步社区 ⋅ 04/27 ⋅ 0

“Spring三剑客”,助你快速从月入过万的程序员到年薪百万的架构师

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 Spring作为Java开发的事实开发框架,一直以来都被开发者誉为杀手级...

异步社区 ⋅ 05/10 ⋅ 0

基于Spring Cloud的微服务落地

微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。 在Java生态圈,目...

烂猪皮 ⋅ 04/20 ⋅ 0

【小马哥】Spring Cloud系列讲座

这里为大家推荐一个不错的Spring Cloud系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施...

杜琪 ⋅ 03/02 ⋅ 0

【小马哥】Spring Boot系列讲座

这里为大家推荐一个不错的Spring Boot系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、...

杜琪 ⋅ 03/02 ⋅ 0

硅谷Spring项目组专家教你利用Spring Cloud构建微服务

src="https://mmbiz.qlogo.cn/mmbiz/tibrg3AoIJTuFDicicUn0SS2W0qcVsRz88M3ejbY1FyA14DNxZSK1iaRSMKTKKOQWP3zlyEJwZHy7wWoaGQl9ZML0Q/0?wxfmt=jpeg" data-ratio="0.6036363636363636" data-t......

Kenny Bastani ⋅ 2016/07/05 ⋅ 0

Spring Cloud-honghu Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud ⋅ 04/25 ⋅ 0

Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】

在前两篇文章:服务网关(基础)、服务网关(路由配置)中,我们了解了Spring Cloud Zuul作为网关所具备的最基本功能:路由。本文我们将具体介绍一下Spring Cloud Zuul的另一项核心功能:过滤...

程序猿DD ⋅ 2017/09/25 ⋅ 0

Spring Cloud 学习资料收集

导读 关于Spring Cloud 去年开始逐渐多的出现在我的视线中,随着微服务这个词越来越热,我们或多或少的都听说过这个词,我们可以将Spring Cloud 看做是java 中Spring 为我们提供的微服务的脚...

yangrd ⋅ 2017/06/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 12分钟前 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 37分钟前 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 昨天 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 昨天 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部