SSL工作原理介绍以及java实现

article/2025/11/3 23:32:24

SSL工作原理介绍以及java实现

目录

  • SSL工作原理介绍以及java实现
    • SSL简介
    • SSL工作原理
      • 握手协议Handshake protocol
        • 1握手阶段使用RSA加密算法
        • 2握手阶段使用Diffie-Hellman加密算法
      • 记录协议Record protocol
      • 警报协议Alert protocol
    • Wireshark抓包图解
    • java实现

Secure Sockets Layer(安全套接层),在OSI七层模型里,该协议工作在会话层和表示层。本文主要从SSL原理入手,讲解SSL认证过程,并使用java实现单向认证。

1. SSL简介

安全套接字(Secure Socket Layer,SSL)协议是一个TCP连接之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。

SSL是Netscape于1994年开发的,后来成为了世界上最通用的安全连接机制,主流的浏览器(IE/Chrome/Firefox等)以及操作系统远程连接服务(Windows的mstsc/Linux的SSH等)都支持SSL协议。

目前有如下版本:SSL2.0、SSL3.0、TLS1.0、TLS1.1、TLS1.2。因之前旧版本暴露出多个严重bug,目前推荐使用TLS1.2版本。

2. SSL工作原理

握手协议(Handshake protocol)

SSL中密钥交换算法有6种:无效(没有密钥交换)、RSA、匿名Diffie-Hellman、暂时Diffie-Hellman、固定Diffie-Hellman、Fortezza。本文以RSA与匿名Diffie-Hellman模式介绍握手协议。

2.1握手阶段使用RSA加密算法

RSA算法概述:
(1)选择两个大素数P、Q
(2)计算N=P*Q
(3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子
(4)选择私钥(解密密钥)D,满足如下条件:(D*E) mod (P-1)(Q-1)=1
(5)加密时,明文PT计算密文CT如下:CT= PT·E mod N
(6)解密时,从密文CT计算明文PT如下:PT= CT·D mod N 这也是SSL中会用一种密钥交换算法。 

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。握手阶段分成五步。

第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,Client确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给Server。

第四步,Server使用自己的私钥,获取Client发来的随机数(即Premaster secret)。

第五步,Client和Server根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。

上面的五步,如下图所示:

SSL单向认证(RSA)

RSA加密算法的握手阶段有四点需要注意:

(1)整个握手阶段都是明文传输。如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。

(2)生成对话密钥一共需要三个随机数。

(3)握手之后的对话使用”对话密钥”加密(对称加密),服务器的公钥和私钥只用于加密和解密”对话密钥”(非对称加密),无其他作用。

(4)服务器公钥放在服务器的数字证书之中。

也就是说,整个对话过程中(握手阶段和其后的对话),服务器的公钥和私钥只需要用到一次。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。

理论上,只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为Diffie-Hellman算法(简称DH算法)。

2.2握手阶段使用Diffie-Hellman加密算法

Diffie-Hellman算法概述:
(1)Alice与Bob确定两个大素数n和g,这两个数不用保密
(2)Alice选择另一个大随机数x,并计算A如下:A=gx mod n
(3)Alice将A发给Bob
(4)Bob选择另一个大随机数y,并计算B如下:B=gy mod n
(5)Bob将B发给Alice
(6)计算Alice的秘密密钥K1如下:K1=Bx mod n
(7)计算Bob的秘密密钥K2如下:K2=Ay mod n
K1=K2,因此Alice和Bob可以用其进行加解密 

使用Diffie-Hellman加密算法时,握手阶段分成五步。

第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。通过Client random、Server random以及服务器提供的DH参数(Server DH parameter)算出私钥。

第三步,Server端使用私钥加密Server DH parameter,发送给Client。Client使用证书中公钥解密得到Server DH parameter。

第四步,Client将客户端提供的DH参数(Client DH parameter)传给Server。

第五步,Client和Server根据约定的加密方法,使用之前双方交换的DH参数生成”秘密密钥”(Premaster secret),用来加密接下来的整个对话过程(Session key)。

上面的五步,如下图所示:

这里写图片描述

Diffie-Hel


http://chatgpt.dhexx.cn/article/kMRw66GR.shtml

相关文章

SSL证书原理是什么?ssl证书工作流程是什么

SSL证书的运用促使网址更加安全性,做为一种加密传输协议书技术性。SSL的挥手协议书让顾客和集群服务器进行彼此之间的身份验证。为了让各位能进一步了解ssl证书,小编来向各位介绍SSL证书原理。 SSL证书原理如下: ①手机客户端向网络服务器恳…

SSL 工作原理

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): SSL工作原理 首先说明下SSL工作原理: 1.1 产生背景 基于万维网的电子商务和网上银行等新兴应用,极大地方便了人们的日常生活…

SSL原理介绍

SSL原理介绍 SSL——安全套接字层(Secure Sockers Layer)协议由著名的Netscape公司开发。为了保证通信双方建立安全可靠的传输隧道,SSL使用PKI中的数字证书技术对通信双方进行身份认证;使用对称加密来保证数据保密性;使…

ssl 原理和建立连接过程

ssl 与http关系 ssl (“Secure Sockets Layer”)加密原理 和https的关系 https http ssl ssl 位置: SSL握手 证书主要作用是在SSL握手中,我们来看一下SSL的握手过程 客户端提交https请求服务器响应客户,并把证书公钥发给客户端客户端验…

SSL/TLS 的工作原理

HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。接下来重点介绍一下 SSL/TLS 的工作原理。 SSL 和 TLS 的区别? SSL 和 TLS 没有太大的区别。 SSL 指安全套接字协议(Secure Sockets Layer),首次…

SSL工作原理

公钥和私钥 一直以来对公钥和私钥都理解得不是很透彻,感觉到模棱两可。今天在网上找了半天,通过查看对这个密钥对的理解,总算弄清楚了。 公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与…

SSL技术原理

SSL详解 建议直接看这:https://cshihong.github.io/2019/05/11/SSL-VPN%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/ SSL [虚拟专用网络]的技术主要用到了SSL技术。有关SSL具体技术,可以参考: SSL/TLS协议详解 SSL [虚拟专用网络]简介 SSL [虚拟专…

SSL协议原理详解

SSL 可参考:SSL技术原理 SSL简介 SSL和TLS: SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性…

SSL协议原理

文章目录 SSL协议原理SSL协议结构SSL原理(握手协议)SSL握手协议第一阶段客户端Client Hello数据包服务端server Hello数据包 SSL握手协议第二阶段**Certificate消息数据包**Server Key Exchange消息数据包ServerHello Done数据包 SSL握手协议第三阶段Cli…

关于SSL原理的详解

关于SSL原理的详解 SSL原理详解一、SSL是什么?二、建立SSL通道过程1.简化篇2.具体建立过程 总结 SSL原理详解 其实SSL从网上看到的资料很多了,但是发现还是没有将原理讲得特别清楚,尤其是对CA,433端口与80端口的数据传输原理&…

ExpandableListView--基本使用介绍

1 什么是ExpandableListView?有啥作用? 首先看一张ExpandableListView 的继承关系图: ExpandableListView的继承关系 根据上图可知,ExpandableListView是ListView的子类。而expandable 在英文中的意思是可扩展的,所以ExpandableL…

ExpandListview

土鳖程序员 【深入篇】自定义ExpandableListView,实现二级列表效果 先看效果图: 上图是我们要实现的效果,那么现在我们开始着手去做,主要分为以下几步: 一丶我们需要根据效果图去思考该如何动手,从上图分析…

ExpandListView总结

from 花葬_小吃一口 小白一位,本文仅一些自己在学习路上的一些总结,请各路大佬觉得不是,或有可补充的地方,请帮忙修正。学生感激不尽(耐心看完哦,代码有几百行,这是我对于可折叠列表学习所有的理…

ExpandableListView详细教程

既然大家能到这里来,相信已经对ExpandableListView用了初步的认识,废话不多说,直接给大家上干货。 源程序找不到了,下图是将ExpandableListView放在DrawerLayout(侧边栏)中的效果。 ExpandableListView就是大家平时在PC端见到的二…

ExpandableListActivity(一)

相关文章 ExpandableListView&#xff08;二&#xff09; 参考资料&#xff1a; 1.sakurakider的文章安卓的ExpandableListView的使用和优化 2. sunny.day的文章ExpandableListView(可扩展的listView) 效果图 首先是组布局和组子项布局 group_layout.xml <?xml versio…

ExpandableListView的简单例子

最近一段时间参考网上的例子&#xff0c;做了一下简单的 ExpandableListView&#xff0c;现在和大家共享一下&#xff1a; 1&#xff1a;main.xml的内容 <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://sch…

android-ExpandableList可展开的list

ExpandableList可展开的list 老规矩。右键取得显示不出来的图片地址&#xff0c;利用下载工具下载这个图片。后缀改为rar即可得到源代码项目。 package zhang.EspandableListView;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.…

android 二级折叠列表,Android折叠列表 ExpandableList

ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表。 效果图: 代码实现 package com.zhou.activity; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.vie…

ExpandableListView的使用

ExpandableListView的使用 效果图 布局 <ExpandableListViewandroid:id"id/expandableListView"android:layout_width"match_parent"android:layout_height"match_parent" /> 初始化 ExpandableListView expandableListView (Expanda…

ExpandableListView简介

学习笔记&#xff0c;欢迎指导。 最近做了一个项目&#xff0c;需要一个层级列表&#xff0c;完成之后&#xff0c;就顺便来做个博客简介一下。 △基本简介 →“ExpandableListView”是对“ListView”做的扩展&#xff0c;“ListView”是个列表&#xff0c;而“ExpandableLis…