h.Connector的SSL属性实现




algorithm属性,按理来说,第一直觉应该是SSL通道执行的加密和解密算法,你可以配置n个算法在这个属性中,如RSA,DES等等。
但是,这个属性却并不是这个意思,这个属性是指对应的JSSEProvider的算法。
对于JSSE来说,它仅仅提供了一个框架,这个框架可以做SSL交互,但需要JDK厂商或者自己去实现,SUN的JDK实现了,IBM的JDK也实现了,对于每一家自己实现的内容,都需要指定一个算法,以SUN为例:
SUNX509这套算法,是指示SUNJSSE实现提供X.509标准的验证算法,也就是在SSL交互的时候,遵循X.509的标准。
当然,SUNJSSE有很多其他标准的算法,你可以选择其中的一套而已。
所以,而我们前面了解到,Tomcat中的默认的一路配置是JSSE的,在Tomcat中提供了这一个开放的配置,配合将Tomcat运行在什么JSSE的实现上,这个算法需要进行修改,默认为SUN的实现,如果运行在IBM的JDK上,那就需要指定这个参数为;
我们可以看到初始化SSL配置的时候,如果Endpoint中配置了算法这一项:
传入到KeyManagerFactory.getInstance方法中。
3.sslprotocol属性实现
当使用JSSE的SSLContext的时候,需要将SSLContext支持的协议作为构造参数传入进去:
Tomcat定义的默认的protocol协议为TLS协议,当然如果你打算使用旧版本的SSLv1,V2等等协议,你可以给Connector定义这个sslprotocol属性。
4.sslEnabledProtocol属性实现
SSLEnabledProtocol属性定义与前面的sslprotocol属性的设置有冲突,都是设定SSL通道支持的哪些协议的,尽量这两个属性设置二选一。
sslprotocol属性是设置到SSLContext.getIntance方法中,而这个SSLEnabledProtocol是直接设置到由SSLContext获得的SSLSocket中,
如果采用BIO进行通信,那么SSLEnabledProtocol的作用会覆盖掉SSLContext的设置。
5.ciphers属性实现
从SSL/TLS协议所支持的各种算法列表中,有下面的格式:
这些算法当实例化SSLContext之后,默认会带有n个算法的实现,这些算法以密钥交换算法_加密解密算法_散列算法作为分隔。
可以通过:
来获得ciper的列表。
而这个ciphers的配置,是将默认的支持的算法列表数据进行过滤,将二者取一个交集。
我们来看看Tomcat中是怎么做的:
retainAll方法就是二者取一个交集,然后这个ciphers再设置到对应的socket中去。
6.keystoreFile/keystorePass属性实现
keystoreFile和keystorePass是服务器端的文件,以JSSE的编程来看,这个文件应该以流的方式装入到KeyStore中;
然后,这个Keystore的最终目的是需要装载到KeymanagerFactory中:
KeymanagerFactory的作用是产生Keymanager,Keymanager是作为参数传入SSLContext.init方法中的。
这个流程也是SSL初始化的整个流程。
7.truststoreFile/truststorePass属性实现
truststoreFile和truststorePass是双向认证的时候用到的,存储的是客户端的秘钥库,也就是远程认证的库。
truststore整体的流程和上面的keystore差不太多,虽然是truststore,但也是通过Keystore读取流。
然后,通过TrustManagerFactory装在进来,TrustManagerFactory产生TrustManager,并传入到SSLContext.init方法;
不同的是,TrustManager作为第二个参数,而keymanager是作为第一个参数。
8.crlFile属性实现
crlFile的作用是证书的过期吊销服务,通常这个路径是一个不断变化的文件,由CA中心发布,CA中心的实时进行更新。
对于crlFile的实现,在双向认证中的TrustManager的初始化中,需要进行指定,一旦有crlFile属性的参与,不能直接TrustManagerFactory中loadTrustStore了,我们可以看到下面的实现逻辑:
总共分成3个步骤:
1.首先,需要把CRL文件的路径读取出来,然后使用CertificateFactory产生CRL对象集合
2.将这个CRL集合作为参数传递给CertStore的实例中,并再次包装为ManageFactoryParameter;
3.将ManageFactoryParameter传递给TrustManagerFactory,通过这种方式进行初始化;
可以看到,上述的代码都是JSSE的代码,而真正的CRL的实现是在JDK中。
9.sessionCacheSize/sessionTimeout属性实现
这两个属性是配置SSLSession的超时时间和缓存大小的,当SSLContext初始化之后,会生成SSLSessionContext上下文:
可以看到,这两个属性最终是设置到SSLSessionContext中去,用以Tomcat所有产生的SSLSession;
10.clientAuth属性实现
对于BIO通道中,是通过SSLSocket进行通信的,clientAuth属性设置到SSLSocket中:
对于NIO的通道,因为JSSE主要提供的接口是SSLEngine,因此这个属性需要设置到SSLEngine中:
h.Connector的SSL属性实现的更多相关文章
- OC中在.h和.m中声明的属性和成员变量有何区别?
相比Swift而言,OC规矩太多. 差不多,.h中声明的属性和成员变量均可以在子类中访问到.而.m则不可.而属性其实也就是成员变量的一种简写,其内部自动包含了getter和setter方法. 如图:V ...
- i.BIO方式的SSL通道流程
前面已经讲解了BIO通道的整体流程,对于SSL的流程是插在通道中的,在BIO通道的初始化的时候,根据Connector配置的SSLEnabled属性进行SSL的逻辑. 主要集中的位置在JIOEndpo ...
- b.Connector配置解析
前面讲解到Tomcat中使用Digester框架进行server.xml到javaBean对象的映射,这篇文章以Connector的SSL通道为例,来讲解Connector的属性是如何注入的. 先看一 ...
- tomcat8源码分析-Connector初始化
谈起Tomcat的诞生,最早可以追溯到1995年.近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉.很多人早期的J2EE项目,由程序员自 ...
- ssl客户端与服务端通信的demo
服务端程序流程 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <str ...
- Netron开发快速上手(一):GraphControl,Shape,Connector和Connection
版权所有,引用请注明出处:<<http://www.cnblogs.com/dragon/p/5203663.html >> 本文所用示例下载FlowChart.zip 一个用 ...
- j.APR连接器整体框图(含SSL实现分析)
APR连接器的思路和bio,nio的整体架构也是类似的,可以看到下面的整体框图: 第一个区别是,对于从Acceptor线程中的socket解析这块,无论是nio还是bio都是在Acceptor线程内直 ...
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...
- matlab图形句柄属性总结
原文在于雪漫的bloghttp://blog.sina.com.cn/s/blog_4b9b714a0100cce2.html这两天在看句柄式图形方面的东西,以下是我在看书过程中整理的学习笔记,比较详 ...
随机推荐
- java中nextLine()和next()的区别
>概述 在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单.我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但是 ...
- jQuery源代码学习之七—队列模块queue
一.jQuery种的队列模块 jQuery的队列模块主要是为动画模块EFFECTS提供支持,(不过到现在为了支持动画队列的inprogress的出入队还是搞不太清楚),单独抽取出一个命名空间是为了使程 ...
- 【转】Ubuntu网卡配置
一.网卡地址配置Ubuntu的网络配置文件是:/etc/network/interfaces1.以DHCP 方式配置网卡 auto eth0 iface eth0 inet dhcp用sudo ...
- Struts2(一):怎么创建对应版本的struts.xml
1.eclisep导航菜单:windows->preferences->Xml->Xml Catalog; 2.在Xml Catalog右侧,添加一个新的XML Catalog: 3 ...
- Leetcode: Assign Cookies
Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...
- ajax异步处理时,如何在JS中获取从Servlet或者Action中session,request
ssh项目中,我需要登陆某个页面(如a.jsp),通过onblur()鼠标失去焦点后来触发js函数(函数是ajax请求)请求到相应的action,处理完成后将数据存放到session对象里面,然后在a ...
- oracle分层查询中的start with和connect by(树结构查询)
来源: http://blog.csdn.net/itmyhome1990/article/details/16338637 ORACLE是一个关系数据库管理系统,它用表的形式组织数据,在某些表 ...
- 借助Glances Monitor,密切关注你的系统
两种方法安装 glances 通常可以有两种方法安装 glances.第一种是通过编译源代码的方式,这种方法比较复杂另外可能会遇到软件包依赖性问题.还有一种是使用特定的软件包管理工具来安装 glanc ...
- ACCESS自动编号清零
ACCESS的数据库,当每次删除所有记录后,表里的一个ID字段(自动编号),无限递增,位数无限扩.当每次执行删除查询时,程序就把“自动编号”型ID字段清零,然后重新从“初始值”开始,解决方法如下: ...
- Gulp学习指南之CSS合并、压缩与MD5命名及路径替换(转载)
本文转载自: Gulp学习指南之CSS合并.压缩与MD5命名及路径替换