微服务安全吗?
时间:2022-07-25
本文章向大家介绍微服务安全吗?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
微服务安全吗?
微服务安全吗?其实存在很多隐患,常规的做法是将微服务置于私有局域网中,通过网关报漏服务。如果破坏者一旦进入了你的私有局域网中,微服务是及其危险的。
配置中心的隐患
配置中心的安全隐患
配置中心有以下几种安全隐患
- 配置中心报漏在公网IP之下
- 配置中心没有做用户验证
- 配置文件中存在敏感信息
- 明文传输内容
配置有泄漏敏感信息的隐患,你的配置中心是不是也这样?
iMac:workspace neo$ curl http://localhost:8888/netkiller-dev-master.json
{"sms":{"gateway":{"url":"https://sms.netkiller.cn/v1","username":"netkiller","password":"123456"}}}
给配置中心增加SSL和HTTP认证,可以让配置中心更安全。
iMac:resources neo$ curl -i -k https://config:s3cr3t@localhost:8888/netkiller-dev.json
HTTP/2 200
set-cookie: JSESSIONID=9E77660C8DC7669121C8D122A48D8737; Path=/; Secure; HttpOnly
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
strict-transport-security: max-age=31536000 ; includeSubDomains
x-frame-options: DENY
content-type: application/json
content-length: 100
date: Mon, 07 Sep 2020 08:24:39 GMT
{"sms":{"gateway":{"url":"https://sms.netkiller.cn/v1","username":"netkiller","password":"123456"}}}
我们将 HTTP2 SSL 应用在配置中心后,就不担心配置文件被嗅探器抓到。
注册中心的隐患
注册中心一不小心就被公网IP报曝漏出去,甚至有被恶意注册的风险。
注册中心有以下几种安全隐患
- 注册中心没有做用户验证,任何人都能访问
- 注册中心曝漏在公网IP之下,被恶意注册的风险。
- 从openfeign 访问 euerka server 明文传输内容
你的注册中心是不是这样的?
iMac:workspace neo$ curl http://localhost:8761/eureka/apps
<applications>
<versions__delta>1</versions__delta>
<apps__hashcode>UP_1_</apps__hashcode>
<application>
<name>WEBFLUX</name>
<instance>
<instanceId>192.168.3.85:webflux</instanceId>
<hostName>192.168.3.85</hostName>
<app>WEBFLUX</app>
<ipAddr>192.168.3.85</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8080</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1599106511367</registrationTimestamp>
<lastRenewalTimestamp>1599106931380</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1599106511367</serviceUpTimestamp>
</leaseInfo>
<metadata>
<management.port>8080</management.port>
</metadata>
<homePageUrl>http://192.168.3.85:8080/</homePageUrl>
<statusPageUrl>http://192.168.3.85:8080/actuator/info</statusPageUrl>
<healthCheckUrl>http://192.168.3.85:8080/actuator/health</healthCheckUrl>
<vipAddress>webflux</vipAddress>
<secureVipAddress>webflux</secureVipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1599106511368</lastUpdatedTimestamp>
<lastDirtyTimestamp>1599106511299</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
</application>
</applications>
经过安全加固后
Eureka Web 界面进入需要输入用户名和密码,HTTP2 SSL 加密传输页面内容。
https://localhost:8761
iMac:resources neo$ curl -k https://eureka:s3cr3t@localhost:8761/eureka/apps
<applications>
<versions__delta>1</versions__delta>
<apps__hashcode>UP_2_</apps__hashcode>
<application>
<name>MICROSERVICE-RESTFUL</name>
<instance>
<instanceId>192.168.3.85:microservice-restful:8081</instanceId>
<hostName>192.168.3.85</hostName>
<app>MICROSERVICE-RESTFUL</app>
<ipAddr>192.168.3.85</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8081</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1599532959290</registrationTimestamp>
<lastRenewalTimestamp>1599533499404</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1599532959290</serviceUpTimestamp>
</leaseInfo>
<metadata>
<management.port>8081</management.port>
</metadata>
<homePageUrl>http://192.168.3.85:8081/</homePageUrl>
<statusPageUrl>http://192.168.3.85:8081/actuator/info</statusPageUrl>
<healthCheckUrl>http://192.168.3.85:8081/actuator/health</healthCheckUrl>
<vipAddress>microservice-restful</vipAddress>
<secureVipAddress>microservice-restful</secureVipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1599532959291</lastUpdatedTimestamp>
<lastDirtyTimestamp>1599532959204</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
</application>
<application>
<name>OPENFEIGN</name>
<instance>
<instanceId>192.168.3.85:openfeign:8088</instanceId>
<hostName>192.168.3.85</hostName>
<app>OPENFEIGN</app>
<ipAddr>192.168.3.85</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8088</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1599533216972</registrationTimestamp>
<lastRenewalTimestamp>1599533517001</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1599533216972</serviceUpTimestamp>
</leaseInfo>
<metadata>
<management.port>8088</management.port>
</metadata>
<homePageUrl>http://192.168.3.85:8088/</homePageUrl>
<statusPageUrl>http://192.168.3.85:8088/actuator/info</statusPageUrl>
<healthCheckUrl>http://192.168.3.85:8088/actuator/health</healthCheckUrl>
<vipAddress>openfeign</vipAddress>
<secureVipAddress>openfeign</secureVipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1599533216972</lastUpdatedTimestamp>
<lastDirtyTimestamp>1599533216920</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
</application>
</applications>
Eureka 客户端 Eureka Client 的安全配置与Eureka Server/Config Server 类似 Eureka 客户端有以下几种安全隐患
- 服务报漏在公网IP之下,任何人都不经过 Eureka Server 和 Openfeign 绕开后直接访问服务
- 明文传输内容
最终总结
H5 / App
^
|
HTTP2 ssl
|
V
Openfeign <--- HTTP2 ssl ---> Eureka Server
^
|
|
HTTP2 ssl
|
|
V
Eureka Client <--- HTTP2 ssl ---> Config Server
- CentOS7安装MySQL
- 分布式系统唯一ID生成方案汇总
- 操作系统底层技术——CPU亲和性
- AngularJS例子 ng-repeat遍历输出 通过js的splice方法删除当前行
- mongoDB报错Cannot find module '../build/Release/bson'
- 计算机视觉处理三大任务:分类、定位和检测
- Windows下RabbitMQ安装及入门
- 计算机视觉任务:图像梯度和图像完成
- Yarn【label-based scheduling】实战总结(一)
- 配置sonarqube+maven
- Yarn【label-based scheduling】实战总结(二)
- HDFS学习:HDFS机架感知与副本放置策略
- spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案
- Spring Security OAuth2 Demo
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 突击并发编程JUC系列-原子引用AtomicReference
- JVM类加载过程科普
- 程序员自我修养之 Git 提交信息和分支创建规范
- Django使用redis作为缓存系统
- 一天一大 leet(两个数组的交集 II)难度:简单-Day20200713
- 2020年研一末找实习总结(面经)
- 一天一大 leet(三角形最小路径和)难度:中等-Day20200714
- 一天一大 leet(判断二分图)难度:中等-Day20200716
- 一天一大 lee(被围绕的区域)难度:中等-Day20200811
- 一天一大 leet(搜索插入位置)难度:简单-Day20200717
- 一天一大 leet(两数之和 II - 输入有序数组)难度:简单-Day20200720
- 一天一大 leet(分割数组的最大值)难度:困难-Day20200725
- 一天一大 leet(矩阵中的最长递增路径)难度:困难-Day20200726
- 一天一大 lee(克隆图)难度:中等-Day20200812
- 一天一大 lee(有效的括号)难度:简单-Day20200814