彻底认识和理解探索分布式网络编程中的SSL安全通信机制
探索分布式网络编程中的SSL安全通信机制
- SSL的前提介绍
- SSL/TLS协议概述
- SSL和TLS建立在TCP/IP协议的基础上
- 分析一个日常购物的安全问题
- 基于SSL的加密通信
- SSL的安全证书
- SSL的证书的实现安全认证
- 获取对应的SSL证书方式
- 权威机构获得证书
- 创建自我签名证书
- SSL握手通信机制
- 公私钥传输加解密
- SSL握手通信的流程
- JSSE介绍说明
- JSSE的核心控制类
- SSLServerSocketFactory
- SSLEngine
- SSLSocketFactory
SSL的前提介绍
在网络环境中,信息在从发送端传输到接收端时,通常会途径多台计算机。在常规情况下,这些中间的计算机并不会对经过的数据进行监听。然而,当我们进行网上银行交易或信用卡支付时,存在潜在的风险,即网络上的敏感信息可能被恶意第三方截获,进而引发个人隐私的泄露风险。
鉴于Internet和Intranet的体系结构并非无懈可击,存在一些安全漏洞,这使得不法分子有机会截获并篡改用户发送的原始信息。随着电子商务的蓬勃发展,用户对信息安全的需求日益增强。为了应对这一挑战,Netscape公司推出了SSL(Server Socket Layer)协议,旨在确保信息能在开放网络(如Internet)上实现安全、保密的传输。
SSL/TLS协议概述
SSL(Secure Sockets Layer)原本是一种用于在网络上的两个节点之间建立安全通信的协议,它通过在通信双方之间建立安全连接,确保数据在传输过程中的机密性、完整性和身份验证。SSL/TLS协议通过一系列复杂的握手过程,实现了密钥交换、数据加密和消息认证等功能,从而保障了通信的安全性。
为了进一步提升其安全性和标准化程度,Internet Engineering Task Force (IETF) 对SSL进行了标准化处理,并制定了RFC 2246规范,将其更名为TLS(Transport Layer Security)。
SSL和TLS建立在TCP/IP协议的基础上
SSL(安全套接层)及其后续版本TLS(传输层安全性)是构建在TCP/IP协议族之上的安全协议,旨在确保网络通信的机密性、完整性和真实性。它们为众多应用层协议提供了安全通信的保障,包括广为人知的HTTP(超文本传输协议)和IMAP(互联网消息访问协议)。
当HTTP协议结合SSL/TLS使用时,我们称之为HTTPS(安全超文本传输协议)。这种结合使得数据在传输过程中被加密,有效防止了数据被窃取或篡改。在标准的网络配置中,HTTP通常使用80端口进行通信,而HTTPS则默认使用443端口,确保用户与服务器之间的数据传输安全无忧。
分析一个日常购物的安全问题
- 问题:用户的信用卡信息在通过互联网传输时,存在着被未经授权的第三方截获的严重风险。这意味着用户的敏感金融数据可能被恶意个体或团体窃取,进而引发身份盗窃或信用卡欺诈等不法行为。
解决 :SSL通过采用先进的加密技术,构建了一个安全可靠的通信通道,确保通信数据的双重保障:即数据的保密性和完整性。这一机制不仅有效防止了数据在传输过程中被未经授权的第三方窃取或窥探,还保证了数据在传输过程中不被篡改,从而维护了数据的真实性和可信度。
- 问题:当用户在网络上发送信息时,这些信息有可能遭受非法篡改,从而导致数据的完整性受到严重破坏。数据完整性是确保信息在传输过程中保持原始、未经修改状态的关键属性。
解决:SSL还提供了身份验证功能,使得通信双方能够确认彼此的身份,进一步增强了通信的安全性。简而言之,SSL为网络通信提供了全面的安全保障,让用户能够放心地进行数据传输和交互。
基于SSL的加密通信
当客户与服务器进行通信时,网络上可能存在潜在的监听风险,使得通信数据有可能被未经授权的计算机非法截获。为了确保会话双方信息的安全传递,SSL(安全套接层)技术应运而生。SSL的核心在于其强大的加密技术,它确保了数据在从一端发送到另一端的过程中得到保护。
如下图所示,该图详细展示了采用SSL的通信过程。从图中可以清晰地看到,客户和服务器的加密通信需要在两端进行相应的加密和解密处理,从而确保了整个通信过程的安全性。
在SSL的加密过程中,发送者首先会对数据进行加密处理,随后再将其传输至接收者。这一举措确保了在网络上传输的是经过加密的数据,从而大大提高了数据的安全性。即便有人在网络上非法截获了这些加密数据,由于缺乏相应的解密密钥,也无法获取数据的原始内容。
当接收者收到这些加密数据时,会先对数据进行解密处理,随后再进行后续的数据处理操作。这一过程确保了数据的完整性和保密性,为客户和服务器的通信提供了坚实的安全保障。
SSL的安全证书
除了实现数据加密通信外,SSL还引入了身份认证机制,这一机制确保通信的双方都能够准确无误地验证对方的真实身份。这种认证机制与我们在现实生活中使用身份证来证明身份的方式相类似。
例如,当你前往银行取款时,如果你声称自己是张三,那么如何能让银行相信你的真实身份呢?此时,出示身份证便成为了一个有效的解决方案。同样地,在SSL通信中,身份认证机制确保了通信双方的真实身份得到验证,从而增强了通信的安全性和可信度。
SSL的证书的实现安全认证
SSL利用安全证书来验证客户或服务器的身份。当客户通过安全连接与服务器进行通信时,服务器会首先向客户展示其安全证书。这份证书不仅声明了服务器的安全性,还确认了服务器的真实身份。每个证书在全球范围内都是独一无二的,这使得其他非法服务器无法冒充原始服务器的身份。从这个角度来看,我们可以将安全证书视为电子身份证。
许多服务器并不要求客户出示安全证书。但在某些特定情境下,如B2B(Business to Business)事务中,服务器可能会要求客户提供安全证书以核实其身份。
获取对应的SSL证书方式
在获取安全证书的过程中,存在两种主要途径。一种途径是选择从权威认证机构(CA)购买证书,这种方式确保了证书的权威性和公信力,因为权威机构会进行严格的身份验证和审核流程,以确保颁发的证书符合安全标准。另一种途径则是创建自我签名的证书,这种方式更为灵活,允许个人或组织在没有第三方认证的情况下自行生成证书。
权威机构获得证书
安全证书作为通信安全的基石,能够显著增强通信双方身份的可信性。这些证书采用先进的加密技术精心打造,几乎无法被他人伪造或篡改,从而确保了通信过程的安全性和完整性。安全证书的可信性源于国际知名的证书颁发机构(CA),如VeriSign(www.verisign.com)和Thawte(www.thawte.com),它们经过严格的审核流程,确保颁发的证书符合最高安全标准。
创建自我签名证书
在某些情况下,通信的双方主要关注的是数据在网络传输过程中的安全性,而非对方的身份验证。此时,可以创建自我签名(self-signed)的证书来满足这一需求。例如,借助Sun公司提供的keytool工具,用户可以轻松地生成此类证书。然而,这类证书类似于个人自制的名片,虽能展示信息,但缺乏权威性,因此无法实现身份认证的功能。
SSL握手通信机制
安全证书不仅包含用于数据加密的密钥,还具备证实通信双方身份的数字签名。其核心依赖于公钥加密技术,这是一种利用非对称密钥对(包括公钥和私钥)进行加密和解密的方法。
公私钥传输加解密
公钥作为公开信息,可被广泛分享;私钥则保持私密,严格保密。利用公钥加密的数据,只有对应的私钥才能解密;反之,私钥加密的信息也仅能被公钥解密。这种非对称特性赋予公钥加密技术在确保数据安全性方面的重要优势,使其成为网络通信中的关键技术。
在安全证书中,这对非对称的密钥扮演着核心角色。私钥是高度保密的,仅由安全证书的所有者掌握。当通信方A欲与通信方B建立安全通信时,A会将其安全证书中的公钥发送给B。随后,B可以利用这个公钥对需要发送给A的数据进行加密。由于公钥加密的特性,只有持有对应私钥的A才能成功解密这些数据,从而确保通信内容的私密性和完整性。
在SSL握手过程中,非对称加密方法被巧妙运用以传递关键数据,从而建立起一个安全可靠的通信会话。一旦SSL握手顺利完成,通信双方将转而采用高效的对称加密方法来传输实际的应用数据,确保数据传输的速度与安全性得到双重保障。
SSL握手通信的流程
在安全证书中,数字签名就如同通信方A的电子身份证,它不仅证实了信息的真实性,也保证了信息的完整性和原始性,即信息确实是由通信方A发出的,既未被伪造也未被篡改。总体流程如下所示:
-
客户端发送SSL版本号、加密参数、会话数据等必要信息至服务器,同时接收服务器的SSL版本、加密参数、会话数据及服务器证书。若服务器要求验证,客户端还需提供其安全证书。
-
客户端严格验证服务器证书。验证失败则终止连接,成功则继续通信。
-
客户端生成预备主密码(pre-master secret),并用服务器公钥加密后发送给服务器。
-
服务器验证客户端证书(若要求),并使用私钥解密预备主密码,生成会话的主密码(master secret)。
-
双方基于主密码生成会话密钥(对称密钥),用于后续通信的加密和解密。这一方法提高了运算效率。
-
双方通知对方使用会话密钥进行加密,并确认SSL握手完成。
-
握手过程结束,会话建立。后续通信均使用此会话密钥进行加密和解密。
JSSE介绍说明
JSSE(Java Secure Socket Extension)作为Java平台的一个关键组件,巧妙地封装了底层复杂的安全通信机制,极大地简化了开发人员构建安全网络应用程序的复杂性。
JSSE主要包括以下4个包:
-
javax.net.ssl
包:此包提供了实现安全套接字通信的类。核心类包括SSLServerSocket
和SSLSocket
,它们分别用于服务器端和客户端的安全套接字通信。 -
javax.net
包:虽然javax.net
包本身并不直接包含与SSL相关的类,但它与javax.net.ssl
协同工作,提供基础的网络通信功能。然而,你提到的SSLServerSocketFactory
和SSLSocketFactory
实际上是javax.net.ssl
包的一部分,它们用于创建SSLServerSocket
和SSLSocket
的实例。 -
java.security.cert
包:这个包包含处理安全证书的类,其中最重要的是X509Certificate
类。它用于表示符合X.509标准的数字证书,该标准由国际电信联盟(ITU-T)和其他组织共同制定,用于公钥基础设施(PKI)中的证书管理。 -
com.sun.net.ssl
包:这个包包含了SUN公司提供的Java安全套接字扩展(JSSE)的实现细节。通常情况下,应用程序开发人员不需要直接使用这个包中的类,除非有特殊需求或定制扩展。这些类通常作为内部实现细节,由javax.net.ssl
包中的公共API所使用。
JSSE的核心控制类
在JSSE(Java Secure Socket Extension)框架中,安全通信的核心构建基石是SSLServerSocket
类和SSLSocket
类,它们分别继承了ServerSocket
和Socket
类,以提供加密和验证功能。SSLSocket
实例通常通过SSLSocketFactory
的实例化方法来创建,而SSLServerSocket
的accept()
方法则在接受新的连接请求时生成相应的SSLSocket
对象。
SSLServerSocketFactory
SSLServerSocket
对象则由SSLServerSocketFactory
负责创建,它确保了服务端能够监听并接受加密的连接请求。值得注意的是,无论是SSLSocketFactory
、SSLServerSocketFactory
还是SSLEngine
对象,它们的实例化都依赖于SSLContext
对象。SSLContext
作为安全通信的上下文环境,提供了创建这些工厂类和引擎类的方法。
SSLEngine
特SSLEngine
类在JSSE中扮演了支持非阻塞安全通信的关键角色。与传统的阻塞式通信不同,非阻塞通信允许应用程序在等待数据传输完成的同时,继续执行其他任务,从而提高了系统的整体性能和响应速度。通过SSLEngine
,开发者能够灵活地实现基于事件驱动或异步I/O的安全通信模型。
SSLSocketFactory
当SSLSocketFactory的createSocket()方法创建一个SSLSocket对象时,这仅仅意味着建立了一个基础的TCP连接。此时,SSL握手过程尚未启动。在通信的双方中,当任一方首次尝试通过调用SSLSocket的getOutputStream()或getInputStream()方法来发送或接收数据时,会触发SSL握手。这个握手过程本质上是通过已建立的TCP连接来交换密钥和进行身份验证等信息,从而确保后续通信的安全性。
相关文章:

彻底认识和理解探索分布式网络编程中的SSL安全通信机制
探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…...

【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息
客户端处理server的ack回复,判断链接连接建立 【Fargo】28:字节序列【libuv】Fargo信令1:client发connect消息给到server客户端启动后理解监听read消息 但是,这个代码似乎没有触发ack消息的接收: // 客户端初始化 void start_client(uv_loop_t...

Vue3自定义事件
自定义事件是一种组件间通信的方式,它允许子组件向父组件发送信息。子组件可以通过自定义事件向父组件传递数据以及事件,当自定义事件触发时,子组件可以借此将子组件的数据传递给父组件并使父组件对此做出相应的操作。 1.声明自定义事件 使…...

BeautifulSoup 与 XPath 用法详解与对比
BeautifulSoup(bs4) 和 XPath 是学习python爬虫过程中常常用到的库,本文将详细介绍它们的功能、使用方法、优缺点以及实际应用中的区别和选择建议。 1. BeautifulSoup 用法详解 1.1 什么是 BeautifulSoup? BeautifulSoup 是 Pyt…...

Emacs 折腾日记(五)——elisp 数字类型
本文是参考 emacs lisp 简明教程 写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。 上一篇我们讲了elisp中的流程控制结构相…...

重拾设计模式--外观模式
文章目录 外观模式(Facade Pattern)概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式(Facade Pattern)概述 定义 外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一…...

源码编译llama.cpp for android
源码编译llama.cpp for android 我这有已经编译好的版本,直接下载使用: https://github.com/turingevo/llama.cpp-build/releases/tag/b4331 准备 android-ndk 已下载: /media/wmx/ws1/software/qtAndroid/Sdk/ndk/23.1.7779620版本 &am…...

StarRocks 排查单副本表
文章目录 StarRocks 排查单副本表方式1 查询元数据,检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据,检查分区级的副本数 # 方式一 查询元数据,检查分区级的副本数…...

Windows11 家庭版安装配置 Docker
1. 安装WSL WSL 是什么: WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具,它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL: Docker 依赖 Linux 内核功能,WSL 2 提供了一个高性能、轻量级的…...

线程知识总结(二)
本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…...

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题
目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…...

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)
一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…...

Definition of Done
Definition of Done English Version The team agrees on, a checklist of criteria which must be met before a product increment “often a user story” is considered “done”. Failure to meet these criteria at the end of a sprint normally implies that the work …...

【漏洞复现】CVE-2023-37461 Arbitrary File Writing
漏洞信息 NVD - cve-2023-37461 Metersphere is an opensource testing framework. Files uploaded to Metersphere may define a belongType value with a relative path like ../../../../ which may cause metersphere to attempt to overwrite an existing file in the d…...

简单工厂模式和策略模式的异同
文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…...

HuggingFace datasets - 下载数据
文章目录 下载数据修改默认保存地址 TRANSFORMERS_CACHE保存到本地 & 本地加载保存加载 读取 .arrow 数据 下载数据 1、Python 代码下载 from datasets import load_dataset imdb load_dataset("imdb") # name参数为full或mini,full表示下载全部数…...

梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
雅各比矩阵与梯度:区别与联系 在数学与机器学习中,梯度(Gradient) 和 雅各比矩阵(Jacobian Matrix) 是两个核心概念。虽然它们都描述了函数的变化率,但应用场景和具体形式有所不同。本文将通过…...

Vscode搭建C语言多文件开发环境
一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录…...

自定义 C++ 编译器的调用与管理
在 C 项目中,常常需要自动化地管理编译流程,例如使用 MinGW 或 Visual Studio 编译器进行代码的编译和链接。为了方便管理不同编译器和简化编译流程,我们开发了一个 CompilerManager 类,用于抽象编译器的查找、命令生成以及执行。…...

时间管理系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
用SparkSQL和PySpark完成以下数据转换。 源数据: userid,page_name,visit_time 1,A,2021-2-1 2,B,2024-1-1 1,C,2020-5-4 2,D,2028-9-1 目的数据: user_id,page_name_path 1,C->A 2,B->D PySpark: from pyspark.sql import SparkSes…...

Sentinel 学习笔记3-责任链与工作流程
本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,原文地址如下: https://blog.csdn.net/baidu_28523317/category_10400605.html 上一篇梳理了概念与核心类:Sentinel 学习笔记2- 概念与核心类介绍-CSDN博客 补一个点:…...

Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
效果预览 第一步: 告诉chatgpt: 将latex格式中的英文翻译为中文(符号和公式不要动),给出latex格式第二步: Latex 转换为 Word(使用GrindEQ ) 视频 https://www.bilibili.com/video/BV1f242…...

使用Chat-LangChain模块创建一个与用户交流的机器人
当然!要使用Chat-LangChain模块创建一个与用户交流的机器人,你需要安装并配置一些Python库。以下是一个基本的步骤指南和示例代码,帮助你快速上手。 安装依赖库 首先,你需要安装langchain库,它是一个高级框架&#x…...

国家认可的人工智能从业人员证书如何报考?
一、证书出台背景 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实施人才强国战略和创新驱动发展战略,加强全国数字化人才队伍建设,持续推…...

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析
文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些,分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

每日十题八股-2024年12月19日
1.Bean注入和xml注入最终得到了相同的效果,它们在底层是怎样做的? 2.Spring给我们提供了很多扩展点,这些有了解吗? 3.MVC分层介绍一下? 4.了解SpringMVC的处理流程吗? 5.Handlermapping 和 handleradapter有…...

网络方案设计
一、网络方案设计目标 企业网络系统的构成 应用软件 计算平台 物理网络及拓扑结构 网络软件及工具软件 网络互连设备 广域网连接 无论是复杂的,还是简单的计算机网络,都包括了以下几个基本元素 : 应用软件----支持用户完成专门操作的软件。…...

学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】
electron主进程与渲染进程直接的通信示例 1. 背景: electronvue实现桌面应用开发 2.异步模式 2.1使用.send 和.on的方式 preload.js中代码示例: const { contextBridge, ipcRenderer} require(electron);// 暴露通信接口 contextBridge.exposeInMa…...

【Java数据结构】ArrayList类
List接口 List是一个接口,它继承Collection接口,Collection接口中的一些常用方法 List也有一些常用的方法。List是一个接口,它并不能直接实例化,ArrayList和LinkedList都实现了List接口,它们的常用方法都很相似。 Ar…...