- 博客(93)
- 资源 (6)
- 收藏
- 关注
转载 TLS/SSL 协议详解 (22)会话复用
由于SSL握手的非对称运算无论是RSA还是ECDHE,都会消耗性能,故为了提高性能,对于之前已经进行过握手的SSL连接,尽可能减少握手round time trip以及运算。 SSL提供2中不同的会话复用机制。1:session id会话复用 对于已经建立的SSL会话,使用session id为key(session id来自第一次请求的server hello中的session...
2018-11-19 10:06:23 6286
转载 TLS/SSL 协议详解(21)证书的选择
由于存在多域名对应一个ip的情况,所以通常会使用SNI来选择证书,这个不再赘述,只要上线过SSL,就会碰到这个问题。 实际使用中还会碰到选择不同公钥算法的证书,例如服务器可能配置2个证书,一个RSA证书,一个ECC证书。通常也会根据客户端提供的加密套件,来选择不同的证书。毕竟使用ECC证书,是跳过了RSA运算,性能可以大幅提高,理论上安全性也相对较高。 至于证书机构,还是不...
2018-11-19 10:03:28 1181 1
转载 TLS/SSL 协议详解 (20)加密套件的选择
服务器在选择算法时,会有优先级,是以客户端提供的的为最优,还是服务器端配置的为最优。所谓的客户端最优,就是根据客户端提供的加密套件,从上到下,看是否有本地支持的,有的话则使用。所谓服务器端最优,就是服务器端根据自身配置的加密套件顺序,一个个在client hello中找,找到了就使用。 其次,当服务器配置ECC证书时,加密套件只能选择XXX_ECDSA_XXX或者ECDH_XXX。当服...
2018-11-19 10:02:23 6485
转载 TLS/SSL 协议详解 (19) Encrypted handshake message
其实这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。 其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。 计算方法也比较简单,将之前所有的握手数据(包括接受、发送),计算md运算,然后计算...
2018-11-19 10:00:25 3539
转载 TLS/SSL 协议详解(18) Change cipher
这是一个无关紧要的数据。在TLS1.3中就被废弃了。需要注意的是,该数据本身不被计算握手摘要,因为它的type不是Handshake。一般开源代码在读到该数据时,计算(derive) read侧的密钥(即解密密钥、解密hmac密钥,解密IV),然后调用read函数时就自然而然的进行解密了。--------------------- 作者:Mrpre 来源:CSDN 原文:http...
2018-11-19 09:56:52 1807
转载 TLS/SSL 协议详解(17) Certificate verify
发送这个类型的握手需要2个前提条件(1):服务器端请求了客户端证书(2):客户端发送了非0长的证书 此时,客户端想要证明自己拥有该证书,必然需要私钥签名一段数据发给服务器验证。签名的数据是客户端发送certificate verify前,所有收到和发送的握手信息(不包括5字节的record)。其实这个流程和签名server key exchange基本一样。计算摘要,然...
2018-11-19 09:55:42 5773
转载 TLS/SSL 协议详解 (16) client key exchange
1 ECDH/ECDHE下client key exchange如下所示比较简单了,和server key exchange处理一样,客户端随机生成一个大数,然后乘上base point,得到的结果就是public key。04表示uncompression,后面是x和y2 RSA下,client key exchange如下所示客户端随机生成48字节的预主密钥,然后使用p...
2018-11-19 09:53:07 5455
转载 TLS/SSL 协议详解(15) client certificate
如果服务器端请求了客户端的证书,客户端即使没有证书,也需要发送该类型的握手报文,只是这种情况下,里面的内容为0。如果浏览器有对应的证书,则会发送证书,当然,也有可能发送上级证书(即发送证书链),这个完全取决于浏览器。特别说明一点,我亲眼见过IE带了一个过期的上级证书发送到服务器,这个简直亮瞎了我。--------------------- 作者:Mrpre 来源:CSDN 原文...
2018-11-19 09:51:10 3734
转载 TLS/SSL 协议详解(13) certificate request
双向认证时,服务器会发送certificate request,表明自己想要收到客户端的证书。 这个类型的握手主要包含了ca证书的subject,用以告诉客户端自己需要哪些证书,不是由这些ca签发的证书“我”不要。 客户端,例如浏览器在收到这个请求时,如果不存在对应的证书,则发送一个空的certificate至服务器,如果存在一个证书,则发送该certificate至服务器。如果存在多...
2018-11-14 22:45:56 3663
转载 TLS/SSL 协议详解(12) server key exchange
对于使用DHE/ECDHE非对称密钥协商算法的SSL握手,将发送该类型握手。RSA算法不会继续该握手流程(DH、ECDH也不会发送server key exchange)。 1:ECDHE下,server key exchange 如下图 ECDHE下主要有几点重要的信息 1:指明自己使用的椭圆曲线(一般根据客户端的拓展中supported_groups中的...
2018-11-14 22:43:11 9001 2
转载 TLS/SSL 协议详解(11) Server Certificate
发送服务器证书,这个不再赘述。将服务器配置的证书(链)发送到客户端。注意证书链的顺序,最下层证书在前(用户证书在前,上级证书在后)。发送的证书是二进制格式,并非base64之后的格式。有个技巧,在wireshark右键“导出分组字节流”功能,然后保存证书,是可以变成一个正常证书的(二进制格式)。--------------------- 作者:Mrpre 来源:CSDN 原文:...
2018-11-14 22:38:44 2467
转载 TLS/SSL 协议详解(10) server hello
Server hello 相对Client hello来说简单的多,Server hello中的内容主要是对Client hello的响应。主要包含几点重要的信息1:确定协商使用的TLS版本号(TLS1.0 or TLS 1.1 or TLS 1.2)。2:随机数(用来生成主密钥和kdf)3:session id(sessionid会话复用需要带上,当然命中session ti...
2018-11-14 22:36:49 5284
转载 TLS/SSL 协议详解 (9) Client hello
SSL报文格式可以大致分为2部分,Record层 和 Handshake层,Record层中指定了后续数据的类型,SSL版本(一般来说固定),以及后续数据的长度。Handshake层欧威Record层的负载,其关系类似TCP层的数据作为IP层的负载。例如上图中显示的那样,SSL报文头部是TVL格式: Content Type: Handshake Version: TLS 1...
2018-11-14 22:15:23 5797
转载 TLS/SSL 协议详解 (8) 协议简介
我们大致了解了SSL的流程,以及运用了哪些手段达到了哪些目的。但是前面的描述毕竟不太完善,但这并不妨碍我们了解SSL。 本节,我们将详细介绍SSL协议,结合报文,我们将学习到比第四章的更多的知识。 首先我们通过抓包,分析一下报文的特点。 我看可以看出,SSL是建立在TCP之上的应用层协议,现在看起来报文有点乱,我们剔除TCP之后再看看: 好了,这下简洁明了多了,如果你熟...
2018-11-14 21:54:20 1308
转载 TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2
证书格式编码格式证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAIN和END包括。(老司机可能就发现了,有点像长了一点的迅雷下载链接) ...
2018-11-14 21:47:48 1737
转载 TLS/SSL 协议详解(6) SSL 数字证书的一些细节1
证书关系到了SSL的众多安全性,比如身份认证,密钥交换。所以有必要单拉出一章来讲证书。本章完善一下前几节中的身份认证的一些缺点。 首先,通过前面讲解,我们知道,证书需要几个重要的字段。例如“拥有者”、“颁发者”、“截止日期”。另外,生成证书的时候会自动生成一份“公钥”以及对应的“私钥”。现在假设我开了一个网站,准备用SSL加密的,需要让全世界信任我这个网站,那么我就需要一个证书,...
2018-11-14 21:33:52 753 3
转载 TLS/SSL 协议详解 (5) 运用密码学原理构建安全信道3
保证数据的完整性 到目前为止,我们后续的报文可以加密通信了。现在只要保证,后续加密的数据不被篡改就行了,或者说,SSL需要辨别数据是否被篡改的能力。 这时候摘要就派上用场了。回顾第三章中,我们提到的摘要的特性: 1:不同的数据,即使是一字节改变,其摘要的结果变化非常大。 2:无论摘要的输入长度是多少,其输出是固定长度,对于MD5而言输出16字节,对于SHA1而言,输出...
2018-11-13 22:20:35 710
转载 TLS/SSL 协议详解 (4) 运用密码学原理构建安全信道2
密钥的协商、交换 上一节中,我们已经能保证客户端的确是和可信的服务器进行交互了,在保证服务器可信的基础上,接下去,我们要让客户端和服务器之间共享一个密钥,该密钥用来加密后续的会话。密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方,而需要消耗如此高性能的直接原因就是,客户端和服务器希望安全的交换或者协商出一个密钥。 那么客户端和服务器之间怎么安全的共享一个密钥而又...
2018-11-13 22:19:05 984
转载 TLS/SSL 协议详解(3) 运用密码学原理构建安全信道1
上一节的知识很大程度上是数学意义上的知识,本章将讲解如何使用这些数学意义上的东西,使其体现出实际应用的价值。本章将站在设计者的角度,考虑如何构建一条安全的信道。1:身份认证首先,之前建行网银的例子告诉我们,要进行安全的加密通信,前提是自己的确和自己想要的对端进行通信,而不是别人,为了和可信的对端进行通信,我们需要一定的手段进行或者说研究出一定的手段,进行身份认证。在这里我们就用到了证书。...
2018-11-13 22:00:28 548
转载 TLS/SSL 协议详解 (2) SSL有关的密码学原理
本文转自 https://blog.csdn.net/mrpre/article/details/778668241:对称加(解)密加密和解密使用同样的密钥。举个例子就知道了。假设现在有一段明文:0010 1101 1110 0101,以及一个密钥:0111,我们定义加密方式是“异或”,4 bit一加密。那么0010 1101 1110 0101 最终将会转换成 0101 1010 10...
2018-11-13 20:56:35 773
转载 TLS/SSL 协议详解(1) 前言
本文转自 https://blog.csdn.net/mrpre/article/details/77866773首先,需要清楚SSL是什么。 很多人把SSL和 HTTPS混为一谈,认为SSL就是HTTPS,其实不尽然。SSL全称是“Secure Socket Layer”,字面上可以从“Secure”单词可以看出,SSL是负责“安全”传输的,并不关心传输的内容是什么。而HTTPS只是S...
2018-11-13 20:54:49 1395
转载 多个Tomcat之间实现Session共享
文章转自 https://www.cnblogs.com/beyang/p/9122406.html多个Tomcat之间实现Session共享对于高访问量、高并发量的网站或web应用来说,目前最常见的解决方案应该就是利用负载均衡进行server集群,例如比较流行的nginx+memcache+tomcat。集群之后比如我们有N个Tomcat,用户在访问我们的网站时有可能第一次请求分发到to...
2018-10-13 14:22:31 3972
转载 Spring Cloud构建微服务架构(七)消息总线(续:Kafka)
Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka。在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud Bus对Kafka的支持,实现消息总线的功能。由于本文会以之前Rabbit的实现作为基础来修改,所以先阅读《Spring Cloud构建微服务架构(七)消息总线》有助于理解本文。Kafka简
2016-11-15 22:26:15 6809
转载 Spring Cloud构建微服务架构(七)消息总线
先回顾一下,在之前的Spring Cloud Config的介绍中,我们还留了一个悬念:如何实现对配置信息的实时更新。虽然,我们已经能够通过/refresh接口和Git仓库的Web Hook来实现Git仓库中的内容修改触发应用程序的属性更新。但是,若所有触发操作均需要我们手工去维护Web Hook中的应用位置的话,这随着系统的不断扩张,会变的越来越难以维护,而消息代理中间件是解决该问题最为合适
2016-11-15 22:04:50 23716 6
转载 Spring Cloud构建微服务架构(六)高可用服务注册中心
近期因工作原因减缓了更新频率,同时为了把Spring Cloud中文社区搭建起来也费了不少时间,几乎每天都在挤牙膏般的凑时间出来做一些有意义的事。未能按原计划更新博文,在此对持续关注我博客的朋友们深表歉意。之前在写Spring Cloud系列文章的时候,列过一个较粗的计划,现在由于收到不少反馈和问题,因此准备做一些调整,先将一些大家关注较为集中的点拉出来写一些内容。今天这篇主要
2016-11-15 22:03:55 14997 4
转载 Spring Cloud构建微服务架构(四)分布式配置中心(续)
本文接之前的《Spring Cloud构建微服务架构(四)分布式配置中心》,继续来说说Spring Cloud Config的使用。先来回顾一下,在前文中我们完成了什么:构建了config-server,连接到Git仓库在Git上创建了一个config-repo目录,用来存储配置信息构建了config-client,来获取Git中的配置信息在本文中,我们继续
2016-11-15 22:03:03 7651
转载 Spring Cloud构建微服务架构(五)服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示:alt我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了
2016-11-15 22:01:49 7761
转载 Spring Cloud构建微服务架构(四)分布式配置中心
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它实现了对服务端和客户端对Spring Environment和PropertySource抽象的映射,所以它除了适用于Spring构建的应用程序,也可以在任何其他语言运行的应用程序中使用。作为一个应用可以通过部署管道来进行测试或者投入生产,我们可以分别为
2016-11-15 22:00:52 3512 3
转载 Spring Cloud构建微服务架构(三)断路器
在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,最终导致自身服务的瘫痪。举个例子,在一
2016-11-15 21:59:45 7234 2
转载 Spring Cloud构建微服务架构(二)服务消费者
在上一篇《Spring Cloud构建微服务架构(一)服务注册与发现》中,我们已经成功创建了“服务注册中心”,实现并注册了一个“服务提供者:COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢?RibbonRibbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon,后续会介绍Feign的使用。Ribbon可以在通过客
2016-11-15 21:58:45 4779 1
转载 Spring Cloud构建微服务架构(一)服务注册与发现
Spring Cloud构建微服务架构(一)服务注册与发现 2016-05-31 Spring Cloud被围观 6754 次Spring Cloud简介Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和
2016-11-15 21:57:49 4382
转载 Oracle 全局临时表
文章转自 http://turandot.iteye.com/blog/1705646Oracle 全局临时表 临时表(Tempotary table)用于保存事务或会话期间的中间结果集。临时表中保存的数据只对当前会话可见,所有会话都看不到其他会话的数据;即使当前会话已经提交了(commit)数据,别的会话也看不到它的数据。对于临时表,不存在多用户并发
2016-10-17 22:05:49 1246
转载 Oracle的Filter,Nest loop,Merge sort join和Hash join
文章转自 http://czmmiao.iteye.com/blog/1807571Merge Sort Join按照Merge Sort Join连接的两表地位完全相同。这种算法会把每个表按照连接列进行排序,生成两个排序集。然后对两个排序集进行一次遍历便可以得到最终结果集。这个算法的特点是,每个表都需要排序,排序后都需要遍历一次。以下面的例子说明,Merge Sort J
2016-10-17 21:37:51 2453
转载 Oracle优化器
本文转自 http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328365.htmlOracle优化器介绍本文讲述了Oracle优化器的概念、工作原理和使用方法,兼顾了Oracle8i、9i以及最新的10g三个版本。理解本文将有助于您更好的更有效的进行SQL优化工作。RBO优化器RBO是一种基于规
2016-10-16 21:33:38 1299
转载 数据库连接池
本文转自 http://www.cnblogs.com/xdp-gacl/p/4002804.html一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机
2016-10-15 21:54:07 845
转载 HashMap与ConcurrentHashMap的区别
本文转自http://blog.csdn.net/xuefeng0707/article/details/40834595从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。
2016-10-12 22:23:39 460
转载 Java并发编程:线程池的使用
本文转自 http://www.cnblogs.com/dolphin0520/p/3932921.htmlJava并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建
2016-10-12 17:44:25 384
转载 Java四种线程池的使用
本文转自http://cuisuqiang.iteye.com/blog/2019372Java四种线程池的使用博客分类: JDKjava线程线程池监控 Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。ne
2016-10-12 17:25:34 670
原创 知耻后勇 警钟长鸣
国庆在家,心中十分感慨,一方面为祖国的日益强大与过往历史十分感动,一方面在工作上的一些事情让我心里有些难受。 上上家公司辞职时,心里已打定主意,给自己定了些目标,在技术上需要有个持续的成长,然而上家公司的两个月经历,让我感到挫败。上家公司做某大型公司的外包项目,做外包其实都是冲着钱去的,我也是如此。试用期快过完时,被告知没有接到项目,简历被刷下来了,然后就没有然后了。背着杂物当天就撤了出来。
2016-10-03 11:02:34 709 2
原创 Spring 核心解析
Spring 容器:包含两种类型,一种为Bean工厂类型,由org.springframework.beans.fatory.BeanFactory接口定义,是最简单的容器,提供基本的DI支持。一种为应用上下文类型,由org.springframework.context.ApplicationContext接口定义,基于BeanFactory之上构建,并提供面向应用的服务。一般采用应用上下文类型
2016-09-02 11:05:48 520
w3c官方文档(众多帮助手册集合)
2010-11-06
java编程思想txt版第四版
2010-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人