`
leo_dream
  • 浏览: 130212 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SSL原理和实现

    博客分类:
  • java
阅读更多

原理:
要想保证网络通信的安全,我们第一反应就是给传输的数据加密,这也是现行安全传输通用的模式。但在传统加密方式(单密钥,对称加密)下,密钥不可避免的要被传送于网络节点之间,(除非是写死到各个节点中,不过那样就没有任何灵活性和普适性),在一定强度的网络攻击下,这种加密方式是很脆弱的。
SSL 的出现解决了这个难题,理解SSL 的关键是理解非对称加密的含义。
在对称加密的情况下,源数据A,通过使用密钥B,加密成为密文C。任何人,只要获得了密钥B,就能够对截获的密文C解密,还原出源数据A。(依靠"算法安全"远不如依靠"密钥安全");在非对称加密中,出现了“密钥对”的概念,即有一个公共密钥(公钥)和一个私有密钥(私钥),经公钥加密的密文只能由私钥解密,反过来,经私钥加密的密文只能由公钥解密。这是个重要的特性(数学原理可参考RSA算法),下面的模拟https通信流程说明了这一特性的重要。
1,客户端向服务端发出请求,服务端将公钥(以及服务端证书)响应给客户端;
2,客户端接收到服务器端端公钥与证书,验证证书是否在信任域内,不信任则结束通信,信任则使用服务端传过来的公钥生成一个“预备主密码”,返回给服务端。
3,服务端接收客户端传过来的“预备主密码”密文,使用私钥解密。非对称加密的安全性也就在于此了,第三方无法获取到“预备主密码”的明文,因为除了服务端,其他任何人是没有私钥的。
4,双方使用“预备主密码”生成用于会话的“主密码”。确认后,结束本次SSL 握手,停止使用非对称加密。
5,双方使用“主密码”对称加密传输数据,直到本次会话结束。
总结整个流程:先采用非对称加密模式,保证“主密码”只被通信双方获知,而后使用传统的对称加密方式通信,这样,保证了密钥安全(即“主密码”)就等于保证了数据安全。之所以建立安全连接后,转而使用对称加密,是因为非对称加密的运算量很大,用于“常态”的数据通信十分低效。
以上描述的仅是SSL 协议中加密通信的原理,没有涉及到证书验证,以及客户端,服务端模式。 

实现:
JDK里面自带了一个密钥生成工具keytool,可以通过它生成SSL 通信需要的密钥对,或者生成自签名的证书。所有密钥对或者签名证书都是存放在“keystore”密钥仓库中,由它来管理。
下面结合具体例子说明:(java  WEB容器:tomcat 5.0)
1,生成服务端密钥仓库,
keytool -genkey -alias svrkey -keyalg RSA -keystore d:\svr.jks -validity 365
"alias"是生成的密钥别名,密钥的导入导出都需要由别名来定位。
"keystore"生成的密钥仓库
"validity"生成密钥仓库的有效期(天)
随后会要求输入密钥仓库入口密码,比如: lostsky_11
输完密码后,接着会要求一系列的输入,无非是单位,所在地区之类的信息,
但是第一项很重要!为输入服务端域名或IP,如: 192.168.1.3或www.591pic.com
必须与服务器域名或IP相同,否则SSL 连接无法建立(这也是SSL 通信验证的一部分)
2,在tomcat_home/conf/server.xml中配置:
找到ssl 通信配置那一段,加入:
keystoreFile="d:\svr.jks" keystorePass="lostsky_11"
服务器启动时会从中寻找用于建立ssl 连接的密钥 
3,导出服务端证书
keytool -export -alias svrkey -file d:\svr.cer -keystore d:\svr.jks
"alias"为想导出的密钥的别名,"file"为导出的证书,"keystore"为存储着导出密钥的仓库
4,生成客户端密钥仓库 
keytool -genkey -alias clientkey -keyalg RSA -keystore d:\client.jks
会要求输入仓库密码:如:midsky
5,将服务端证书导入到客户端密钥仓库
keytool -import -file d:\svr.cer -keystore d:\client.jks
会要求输入客户端密钥仓库的密码:如上是:midsky
这样服务端的密钥仓库就在tomcat部署完毕了,
6,在客户端,每次访问服务端之前,加入
"System.setProperty("javax.net.ssl .trustStore","d:\\client.jks");
System.setProperty("javax.net.ssl .trustStorePassword","midsky"); " 
就把服务端证书添加到了客户端的信任域中,能够完成ssl 通信。
注:ssl 通信主要验证三个方面:
a, 证书是否可信(第6步)
b, 证书是否过期(第1步:validity)
c, 证书地址是否和当前访问地址符合(第1步)
客户端添加信任域还有编程的动态方法,但是那样会降低通信的安全性,对于证书相对固定的服务,不建议使用。
以上是客户端对于服务端的验证,这也是SSL 默认的实现方式。在这种方式下,每次通信时,发起请求方(如PC中的BROWSER)都会验证响应方(如某个WEB服务端)的证书是否在己方信任域中,对方的证书是否过期,对方的域名或IP,是否与信任域中证书记载的一致;不符合其中任何一项,通信都会被拒绝。但反过来,响应方是不对请求方做任何验证的。所以有些需要双向验证的服务(比如某些服务只能对特定的拥有证书的用户开放),就需要添加客户端证书,由服务端来验证了,原理和实现与默认模式类似。

分享到:
评论

相关推荐

    基于SSL的身份认证和访问控制实现原理.pdf

    基于SSL的身份认证和访问控制实现原理.pdf

    ssl 协议简介 原理 过程

    可在服务器和客户机两端同时实现支持,目前已成为互联网上保密通讯的工业标准,现行Web浏览器亦普遍将Http和SSL相结合,从而实现安全通信。此协议和其继任者传输层安全(Transport Layer Security,TLS)是为网络...

    Windows下用SSL实现加密通讯Demo

    Windows下用SSL实现加密通讯Demo。内含win32 realease版本的openssl-1.1.0f静态库,及用其生成的加密数字证书文件。可参见:http://blog.csdn.net/ljttianqin/article/details/73498453

    Java实现SSL双向认证的方法

    主要介绍了Java实现SSL双向认证的方法,实例分析了ssl认证的原理与相关实现技巧,需要的朋友可以参考下

    实验:在Windows 2000的IIS中实现SSL

    了解证书的内容和CA,掌握SSL 的原理及在IIS 中的应用 证书颁发服务器,web服务器,客户端配置

    java ssl实现

    java实现的ssl登陆,与开放平台原理相似,提供出来供大家学习参考

    SSLVPN的技术原理与应用.docx

    SSLVPN的技术原理与应用.docx

    SSLDemo安全Socket通信Demo

    基于Socket安全通信,数字签名技术,以及SSL原理实现,非对称加密与对称加密,反正挺多的,自己看去把

    VC++ 毕业论文:RSA文件加密原理及代码实现

    VC++ 毕业论文:RSA文件加密原理及代码实现 RSA在软件方面的应用,主要集中在Internet上。加密连接、数字签名和数字证书的核心算法广泛使用RSA。日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer...

    论文研究-基于SSL协议的可信应用及实现.pdf

    首先分析了安全套接层(SSL)协议在握手阶段的信任不足问题,然后讨论了信任协商机制的原理,提出了采用信任协商机制来扩充SSL协议,并给出了具体的实现方案。

    SSL协议的工作原理

    SSL使用非对称加密技术实现会话双方之间信息的安全传递,可以实现信息传递的保密性、完整性,这样的话,所传送的数据不容易被网络黑客截获和破解,并且会话双方能鉴别对方身份。

    HTTP协议,介绍http2,重要的头信息讲解,ssl的本地实现与原理

    HTTP协议原理+实践 Web开发工程师必学, 第1章 课程导学 第2章 HTTP协议基础及发展历史 第3章 HTTP各种特性总览 第4章 Nginx代理以及面向未来的HTTP

    SSL协议及WEB安全实现

    SSL是一种安全传输协议,其全称是Securesocketlayer(安全套接层)。该协议最初由Netscape企业发展而来,现已成为网络上用来鉴别网站和网页浏览者身份,以及在浏览器使用者及...本文主要从SSL协议的原理和主要应用进行介绍。

    Nginx服务器负载均衡及ssl原理、生成ssl密钥对、Nginx配置ssl操作示例

    当用户访问nginx定制好的域名时,nginx通过转发到几台真实的站点,通过upstream实现 [root@centos7 vhost]# vim /usr/local/nginx/conf/vhost/load.conf upstream www.tt.com #自定义域名 { # ip_ash; #保证同一个...

    SSL安全协议研究,云大软院

    本文从SSL安全协议的实现原理出发,并深入分析其实现的技术细节特点,以及SSL安全协议在目前科技条件下的主流应用以及它的优缺点,未来SSL安全协议技术的发展。 【关键词】SSL协议;记录层;握手层;安全漏洞;应用

    U盘禁止器(原理:过滤usb驱动,不影响键鼠的使用)

    类似360.qqkav.这些软件,他们的U盘木马免疫是很弱的。 木马很容易就可以删除他的所谓的免疫文件。...在说下工作原理把:过滤USB驱动 自己想下 工具的强大性 值不值10分 我用于 学校机房电脑的管理软件,真的很强大

    煤炭网电子支付中SSL协议的改进与实现

    随着电子商务的普及,煤炭业也有了自己的电子商务网站,煤炭网的安全协议SSL存在不安全性,文中提出了对SSL协议的改进方案,并给出了双重签名的认证原理与系统的模拟实现。

    一种将AES和SSL结合的数据加密算法 (2005年)

    最后,重点阐述了该算法的原理及实现过程,并通过测量数据加密传输的网络延时证实:AES与SSL相结合的混合加密算法在实现授权认证功能、安全密钥传输的基础上,仍继承了AES算法的实时性,是远程实时数据安全传送的...

    ssl_slam:SSL_SLAM

    该代码是论文“固态LiDAR的轻型3-D本地化和映射”的实现,已在2021年IEEE机器人与自动化快报中接受 可以在上找到摘要视频演示 修改人:,新加坡南洋理工大学 1.固态激光雷达传感器示例 1.1场景重建 1.2 SFM建筑实例...

Global site tag (gtag.js) - Google Analytics