Blog

让SSL/TLS协议流行起来:深度解读SSL/TLS实现

转自:http://netsecurity.51cto.com/art/201505/476337_all.htm 一 前言 SSL/TLS协议是网络安全通信的重要基石,本系列将简单介绍SSL/TLS协议,主要关注SSL/TLS协议的安全性,特别是SSL规范的正确实现。 本系列的文章大体分为3个部分: SSL/TLS协议的基本流程 典型的针对SSL/TLS协议的攻击 SSL/TLS协议的安全加固措施 本文对SSL/TLS协议概况做基本介绍,包括SSL/TLS协议的版本变迁,协议的详细流程以及流行的SSL/TLS协议实现。文章的主要内容翻译自波鸿鲁尔大学Christopher Meyer的文章《20 Years of SSL/TLS Research An Analysis of the Internet’s Security Foundation》,同时也根据作者自己的理解增加了部分内容,以使对SSL/TLS协议的介绍更为完整。 二 什么是SSL/TLS? SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。 SSL最初的几个版本(SSL 1.0、SSL2.0、SSL 3.0)由网景公司设计和维护,从3.1版本开始,SSL协议由因特网工程任务小组(IETF)正式接管,并更名为TLS(Transport Layer […]

READ MORE

一、内容概览 在TeamCity初使用中我们了解了TeamCity的基本概念和基本使用方法,本篇在上一篇的基础上将继续介绍如何配置构建通知、自动合并分支和接入第三方NuGet Feed。 二、构建通知 在自动构建的基础上加入构建通知是一个很好的设计。这样我们就可以在第一时间知道何时发生的构建,构建是否成功,构建失败的原因等信息。接下来就让我们看一下如何通过配置TeamCity完成构建通知自动邮件通知功能。 1、配置发送邮箱: 2、配置个人邮箱地址: 3、配置通知规则:点击左侧【Notification Rules】 选中【Email Notifier】,选择需要【Watch】的配置和关心的分支,我这里将该配置的所有分支都纳入进来了。右侧则是配置在触发哪些事件时发送邮件。这里可以分别对不同项目配置不同的通知规则。 点击保存后尝试运行构建,在构建完成后就会收到一份构建结果通知邮件啦。 三、自动合并分支 在使用Git作为团队代码管理协作工具时,我们不免会使用一些Gitflow模型。假设我们有一个简化的Gitflow模型:一个Master分支、一个Dev分支、若干Feature分支,参考Vincent Driessen的Gitflow模型,为了演示方便我们把hotfix,release都去掉,每次在Feature分支提交时如果构建成功则自动Merge到Dev分支上。接下来让我们看看如果使用TeamCity实现这一功能。 1、代码版本管理器配置: 点击【Version Control Settings】进入VCS Roots,点击【Edit】编辑配置。 将默认分支设定为dev分支,分支过滤条件为以feature-开头的所有分支。 2、创建Build Features 新建一个Automatic merge类型的Build Features,通过名字就知道这是一个自动合并的意思了。 按照上图所示配置:【Watch builds in branches】的意思是,仅当符合条件的分支产生提交时才触发合并,也就是我们前面约定的将feature-xxxx分支的修改在成功编译的条件下自动merge到dev分支。【Merge […]

READ MORE

TeamCity初使用

By : -

TeamCity初使用

一、内容概览 本篇介绍了TeamCity的基本概念,并以一个简单的例子来了解TeamCity是什么,能做什么。该例子使用TeamCity完成一个.net程序的持续集成过程(CI)。本篇文章基于TeamCity 2017.2,Centos 7.3,Visual Studio 2015,.Net Framework  4.5.2。 二、什么是TeamCity 官方对TeamCity的定义是:安装即用的强大持续集成工具。 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 在传统开发过程中,持续集成可能是团队中固定的集成负责人去做,也有可能是团队中任意一个人去做。相对于自动化工具来说,人工集成的频率不会高,例如我之前的团队会每2-3天集成一次,遇到项目周期紧的时候可能更长。这就导致有些问题/bug发现的不及时,从而导致项目后期压力变大。 使用CI工具后,这些都不会成为问题,因为我们甚至可以做到每次提交都集成一次,而且完全不用人工干预。 通过下图可以了解目前TeamCity支持的平台和环境: 三、部署TeamCity 本篇采用的部署方式是将TeamCity Server部署在Linux服务器上,配合一台Windows系统作为Build Agent(实际的集成工作是由Build Agent来完成的)来构建一个.net程序。 1、从https://www.jetbrains.com/zh/teamcity/download/download-thanks.html?platform=linux下载TeamCity Linux版本,其他版本也可以,具体使用方式是一致的。 2、从https://confluence.jetbrains.com/display/TCD10/Installing+and+Configuring+the+TeamCity+Server获取详细的安装指导。 3、安装完成后不用做其他配置。Windows系统根据向导选择启动Server和Agent。Linux系统cd到TeamCity/bin目录下执行命令: [root@192 bin]# ./runAll.sh start Spawning TeamCity restarter […]

READ MORE

转自:https://yq.aliyun.com/articles/334155;作者:程序猿小卡 一、内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。 二、什么是WebSocket HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。 对大部分web开发者来说,上面这段描述有点枯燥,其实只要记住几点: WebSocket可以在浏览器里使用 支持双向通信 使用很简单 1、有哪些优点 说到优点,这里的对比参照物是HTTP协议,概括地说就是:支持双向通信,更灵活,更高效,可扩展性更好。 支持双向通信,实时性更强。 更好的二进制支持。 较少的控制开销。连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。而HTTP协议每次通信都需要携带完整的头部。 支持扩展。ws协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议。(比如支持自定义压缩算法等) 对于后面两点,没有研究过WebSocket协议规范的同学可能理解起来不够直观,但不影响对WebSocket的学习和使用。 2、需要学习哪些东西 对网络应用层协议的学习来说,最重要的往往就是连接建立过程、数据交换教程。当然,数据的格式是逃不掉的,因为它直接决定了协议本身的能力。好的数据格式能让协议更高效、扩展性更好。 下文主要围绕下面几点展开: 如何建立连接 如何交换数据 数据帧格式 如何维持连接 三、入门例子 在正式介绍协议细节前,先来看一个简单的例子,有个直观感受。例子包括了WebSocket服务端、WebSocket客户端(网页端)。完整代码可以在 这里 找到。 这里服务端用了ws这个库。相比大家熟悉的socket.io,ws实现更轻量,更适合学习的目的。 1、服务端 代码如下,监听8080端口。当有新的连接请求到达时,打印日志,同时向客户端发送消息。当收到到来自客户端的消息时,同样打印日志。 var app […]

READ MORE
从分布式到微服务,深挖Service Mesh

原文:Pattern: Service Mesh (作者/Phil Calçado,翻译/雁惊寒,责编/魏伟 )转自:http://blog.csdn.net/fl63zv9zou86950w/article/details/78245919 摘要:在前一段时间,我们CSDN推出了《深度剖析Service Mesh服务网格新生代Istio》一文,大家应该深刻理解了扛起Service Mesh大旗的Istio的架构和功能,该篇文章可以看作是这篇的前传,本文由易到难地介绍了分布式系统到服务网格的演化过程,从而让读者对Service Mesh有了更加深刻的认识,以下是译文。 自从几十年前第一次引入分布式系统这个概念以来,出现了很多原来根本想象不到的分布式系统使用案例,但同时也引入了各种各样的新问题。 当这些系统还是比较少比较简单的时候,工程师可以通过减少远程交互的次数来解决复杂性问题。处理分布式问题最安全的方法是尽可能避免远程交互,虽然这可能意味着要在多个系统上存放重复的逻辑和数据。 行业上的需求推动着我们前进的步伐,分布式系统的组成从几个大型的中央电脑发展成为数以千计的小型服务。在这个新的世界里,我们必须走出困境,应对新的挑战和开放性问题。首先,具体问题具体分析,针对某个问题给出有针对性的解决办法,然后再提供更先进更复杂的解决方案。随着我们对问题领域越来越熟悉、提出的解决办法越来越好,我们开始将一些最常见的需求总结归纳为模式、库,以及最终的平台。 当电脑第一次联网 由于人们首先想到的是让两台或多台电脑相互通讯,因此,他们构思出了这样的东西: 互相之间可以通讯的两个服务可以满足最终用户的一些需求。但这个示意图显然过于简单了,缺少了包括通过代码操作的字节转换和在线路上收发的电信号转换在内的多个层。虽然,一定程度上的抽象对于我们的讨论是必需的,但还是让我们来添加网络协议栈组件以增加一点细节内容吧: 上述这个修改过的模型自20世纪50年代以来一直使用至今。一开始,计算机很稀少,也很昂贵,所以两个节点之间的每个环节都被精心制作和维护。随着计算机变得越来越便宜,连接的数量和数据量大幅增加。随着人们越来越依赖网络系统,工程师们需要保证他们构建的软件能够达到用户所要求的服务质量。 当然,还有许多问题急需解决以达到用户要求的服务质量水平。人们需要找到解决方案让机器互相发现、通过同一条线路同时处理多个连接、允许机器在非直连的情况下互相通信、通过网络对数据包进行路由、加密流量等等。 在这其中,有一种叫做流量控制的东西,下面我们以此为例。流量控制是一种防止一台服务器发送的数据包超过下游服务器可以承受上限的机制。这是必要的,因为在一个联网的系统中,你至少有两个不同的、独立的计算机,彼此之间互不了解。 计算机A以给定的速率向计算机B发送字节,但不能保证B可以连续地以足够快的速度来处理接收到的字节。例如,B可能正在忙于并行运行其他任务,或者数据包可能无序到达,并且B可能被阻塞以等待本应该第一个到达的数据包。这意味着A不仅不知道B的预期性能,而且还可能让事情变得更糟,因为这可能会让B过载,B现在必须对所有这些传入的数据包进行排队处理。 一段时间以来,大家寄希望于建立网络服务和应用程序的开发者能够通过编写代码来解决上面提出的挑战。在我们的这个流程控制示例中,应用程序本身必须包含某种逻辑来确保服务不会因为数据包而过载。这种重联网的逻辑与业务逻辑一样重要。在我们的抽象示意图中,它是这样的: 幸运的是,技术的发展日新月异,随着像TCP/IP这样的标准的横空出世,流量控制和许多其他问题的解决方案被融入进了网络协议栈本身。这意味着这些流量控制代码仍然存在,但已经从应用程序转移到了操作系统提供的底层网络层中: 这个模型相当地成功。几乎任何一个组织都能够使用商业操作系统附带的TCP/IP协议栈来驱动他们的业务,即使有高性能和高可靠性的要求。 当第一次使用微服务 多年以来,计算机变得越来越便宜,并且到处可见,而上面提到的网络协议栈已被证明是用于可靠连接系统的事实上的工具集。随着节点和稳定连接的数量越来越多,行业中出现了各种各样的网络系统,从细粒度的分布式代理和对象到由较大但重分布式组件组成的面向服务的架构。 这样的分布式系统给我们带来了很多有趣的更高级别的案例和好处,但也出现了几个难题。其中一些是全新的,但其他的只是我们在讨论原始网络时遇到难题的更高版本而已。 在90年代,Peter Deutsch和他在Sun公司的同事工程师们撰写了“分布式计算的八大错误”一文,其中列出了人们在使用分布式系统时通常会做出的一些假设。Peter认为,这些假设在更原始的网络架构或理论模型中可能是真实的,但在现代世界中是不成立的: 网络是可靠的 延迟为零 带宽是无限的 网络是安全的 […]

READ MORE

Vim入门基础

By : -

转自:https://www.jianshu.com/p/bcbe916f97e1 图片来自: http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html 公司新员工学习有用到,Vim官网的手册又太大而全,而网上各方资料要么不全面,要么不够基础。在网上搜集各方资料,按照自己的框架整理一份Vim入门基础教程,分享出来。特点是偏向基础,但对入门者来说足够全面,而且结构框架清晰。 另外,参考资料众多,没有一一标出来,如果作者看到,请联系我确认一下是否参考了你的资料,我会在文中标注出来。 1. 简介 Vim(Vi[Improved])编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的Vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立、修改文本文件。进入Vim编辑程序,可以在终端输入下面的命令: $vim [filename] 其中filename是要编辑器的文件的路径名。如果文件不存在,它将为你建立一个新文件。Vim编辑程序有三种操作模式,分别称为 编辑模式、插入模式 和 命令模式,当运行Vim时,首先进入编辑模式。 2. 编辑模式 Vim编辑方式的主要用途是在被编辑的文件中移动光标的位置。一旦光标移到到所要的位置,就可以进行剪切和粘贴正文块,删除正文和插入新的正文。当完成所有的编辑工作后,需要保存编辑器结果,退出编辑程序回到终端,可以发出ZZ命令,连续按两次大写的Z键。 2.1 跳转 如果键盘上有上、下、左、右箭头的导航键,就由这些键来完成光标的移动。另外,可以用下面的键完成同样的 按字符移动 功能: k 上移; j 下移; h 左移; […]

READ MORE
Android热更新方案Robust

转自:https://tech.meituan.com/android_robust.html 美团•大众点评是中国最大的O2O交易平台,目前已拥有近6亿用户,合作各类商户达432万,订单峰值突破1150万单。美团App是平台主要的入口之一,O2O交易场景的复杂性决定了App稳定性要达到近乎苛刻的要求。用户到店消费买优惠券时死活下不了单,定外卖一个明显可用的红包怎么点也选不中,上了一个新活动用户一点就Crash……过去发生过的这些画面太美不敢想象。客户端相对Web版最大的短板就是有发版的概念,对线上事故很难有即时生效的解决方式,每次发版都如临深渊如履薄冰,毕竟就算再完善的开发测试流程也无法保证不会将Bug带到线上。 从去年开始,Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa、Tinker等;另一类就是native hook方案,如阿里开源的Andfix和Dexposed。这样客户端也有了实时修复线上问题的可能。但经过调研之后,我们发现上述方案或多或少都有一些问题,基于native hook的方案:需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,兼容性上会有一定的影响;基于Multidex的方案,需要反射更改DexElements,改变Dex的加载顺序,这使得patch需要在下次启动时才能生效,实时性就受到了影响,同时这种方案在android N [speed-profile]编译模式下可能会有问题,可以参考Android N混合编译与对热补丁影响解析。考虑到美团Android用户机型分布的碎片化,很难有一个方案能覆盖所有机型。 去年底的Android Dev Summit上,Google高调发布了Android Studio 2.0,其中最重要的新特性Instant Run,实现了对代码修改的实时生效(热插拔)。我们在了解Instant Run原理之后,实现了一个兼容性更强的热更新方案,这就是产品化的hotpatch框架--Robust。 原理 Robust插件对每个产品代码的每个函数都在编译打包阶段自动的插入了一段代码,插入过程对业务开发是完全透明。如State.java的getIndex函数: public long getIndex() { return 100; } 被处理成如下的实现: public static ChangeQuickRedirect changeQuickRedirect; public […]

READ MORE

转自:http://blog.csdn.net/qq129169/article/details/71734863 前言:由于对webpack的了解有限,所以在项目部署出现许多问题 一、webpack使用ES6语法,第三方js可以引入通过import,可以通过npm 配置到项目中或者直接下再加入项目js文件中 首先无论require还是import,都不是webpack的发明,它们是已经存在于世的不同的模块化规范(目前都不能直接运行于浏览器,于是需要通过webpack在配合各种plugin、loader将其转义,使之可以运行在浏览器里,关于require,最早应该见于nodejs开发,属于CommonJS规范的一部分,可以看Modules/1.1。 关于import,是ES2015里的新模块化规范,可以看ES6 modules,_就是个变量,当然能在js里使用,这个jquery里的$是一种东西,无非是命名怪了点,总归还是变量 require或者import用法,那目前仍然需要通过babel或者traceur之类的转义工具将之转义为ES5语法,才能在浏览器里运行。但对于lodash库本身,并不是非得利用webpack…之类的工具才能用,直接使用&script&标签放在html里,就可以使用了。 二、vue引入jquery插件出现jQuery is not defined 1、如果要使用$、jquery、jQuery必须先引入jquery.js,如果报这些错误先看路径和引入顺序问题 2、在vue+webpack环境中,jquery的第三方插件还是会报错,可以参考 Webpack引入jquery及其插件的几种方法 (1). 直接引入[难以引入插件]  // 可以直接引入jquery,但没有全局的jQuery变量 import $ from ‘jquery’ // 如果此时直接引入jquery 插件,则失败,如 import ‘jquery-ui’ // 错误,将会找不到jquery-ui注册的相关方法 […]

READ MORE

系统防火墙关闭后docker对外绑定端口会出现以下错误 Error response from daemon: driver failed programming external connectivity on endpoint xxx (137264f0e2e1962b04bcf6a2dfafc6f3ef28837f6ed7457c2421198db923f738): iptables failed: iptables –wait -t nat -A DOCKER -p tcp -d 0/0 –dport 8000 -j DNAT […]

READ MORE

Linux常用操作备忘

By : -

网络相关 开关防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 systemctl enable firewalld.service #禁止firewall开机启动 systemctl start firewalld.service #禁止firewall开机启动 firewall-cmd –reload #重启防火墙 打开关闭端口 firewall-cmd –zone=public –add-port=80/tcp –permanent #打开端口 firewall-cmd –remove-port=80/tcp –permanent […]

READ MORE