理解HTTPS/TLS/SSL(一)基础概念+配置本地自签名证书

文章目录

  • 没有HTTPS时的样子
    • 场景模拟
    • WireShark的Capture Filter和Display Filter
      • 设置Capture Filter
      • 启动程序
      • 设置Display Filter过滤抓到的包
    • 结论
  • 关于为什么加密更简洁有力的回答
  • 对称加密和非对称加密和CA证书
    • 密钥交换
    • 对称加密
    • 非对称加密
    • CA机构和证书
      • 如何解决客户端和CA机构之间的信任问题?
  • 使用Java的keytool生成公钥和私钥和自签名证书
    • 使用可视化工具KeyStore Explorer生成
  • 为Tomcat配置TLS/SSL
    • 配置SSL并使用自签名证书之后不生效
    • 解决Chrome浏览器对自签名证书的不包含主备选名的问题
  • 有了HTTPS后的世界
    • WireShark抓到的包
  • 参考资料

对于HTTPS、TLS、SSL相关的概念,平时也是时常接触到。看过几篇文章之后,总以为自己真正了解了,实际上碰到问题时才知道,自己恐怕连入门都算不上。所以打算入个门,补上这一部分的基础知识,对于更深层次的东西,例如各种标准的解读,则不打算深入。

没有HTTPS时的样子

我们都知道HTTP是不安全的,以及为什么不安全。但是为了更直观的说明以及加深理解,做一个简单的模拟,我使用WireShark作为辅助工具。

场景模拟

本地建一个简单Restful Java项目,并部署到Tomcat中。

  • JDK版本Open JDK 11.0.19
  • Tomcat 版本10.1.11

WireShark的Capture Filter和Display Filter

设置Capture Filter

我们只去抓本地的包,所以在开始抓包之前,在用户界面中选择Loopback, 并设置Capture Filter

src host localhost and dst host localhost

在这里插入图片描述
回车,开始进行抓包。

Capture Filter的相关语法可以在 WireShark软件用户界面 > Help > Wiki > CaptureFilters 中找到 > Further Information(pcap-filter man page ) 全部语法

启动程序

本地启动测试程序, IDEA中Tomcat的配置中应该只配HTTP Port,我这里配置的是8080.

在终端进行post请求

curl -X POST http://localhost:8080/validation/valid/inline/post

设置Display Filter过滤抓到的包

设置Display Filter

http and tcp.port eq 8080

在这里插入图片描述
Display Filter的相关语法可以

  • 在WireShark软件用户界面 > Help > Wiki > DisplayFilters 中找到,
  • WireShark官方网站 > Documentation > Display Filter Reference

结论

上面的场景模拟概括成一句话就是: HTTP是裸奔的。任何数据在网络中传播都是以明文的形式,使用抓包工具即可截获报文,甚至可能对其进行修改。这种危害可太恐怖了,所有使用网络与各种服务交互的人,各种隐私轻轻松松就泄露出去了。

关于为什么加密更简洁有力的回答

为了解决裸奔的问题,势必要对通信进行加密并解决中间人攻击问题。

关于为什么需要加密,更详细的说明可参考cloudflare官方的一篇博客,比我的语言更准确。以下内容引自上述博客的中文版

  1. 隐私:加密可确保除预期的收件人或正当的数据所有者以外,任何人都无法读取静止的通信或数据。这可以防止攻击者、广告网络、互联网服务提供商以及(在某些情况下)政府拦截和读取敏感数据,保护用户隐私

  2. 安全性:无论是传输中的数据还是静止数据,加密都有助于防止数据泄露。如果公司设备丢失或被盗,且其硬盘驱动器已适当加密,则该设备上的数据将仍是安全的。类似地,加密通信使通信双方能够交换敏感数据而不会泄露数据。

  3. 数据完整性: 加密还有助于防止恶意行为,如在途攻击。当数据在互联网上传输时,加密可确保收件人收到的内容在途中没有被查看或篡改过

  4. 法规:出于所有这些原因,许多行业和政府法规要求处理用户数据的公司对这些数据进行加密。需要加密的法规与合规性标准的示例包括 HIPAA、PCI-DSS 和 GDPR。

对称加密和非对称加密和CA证书

密钥交换

  • 无论使用哪种加密方式,在服务器下发密钥或浏览器/服务器双方交换密钥的时候,由于存在中间人攻击,都有可能被中间人截获。中间人会假装扮演 服务器/浏览器 同 浏览器/服务器 交互,进行各种不安全的操作,例如伪造假请求、假响应、拿到浏览器的请求信息、服务器的请求信息,里面可能包含上述各种敏感数据。
  • 有的人可能会想到,我在请求服务器之前,我提前拿到不就可以了?关键是怎么提前拿到?互联网中这么多的,各种各样的服务,你怎么知道你哪天会用到哪个网站呢?所以密钥要在同服务器第一次连接时才能确定

那么如何解决中间人攻击呢?下文CA证书部分会详细解释。

对称加密

对称加密的只有一把key,这个key既可以用来加密信息,也可以用来解密信息。

这就是它的缺点,只要能拿到密钥,则可以解密、加密信息。

非对称加密

  • 非对称加密使用两把key,它解决了上述对称加密的缺点。一把key-1加密的信息必须由其对应的另外一把key-2才能解密,key-1本身不能再解密这个信息。这里要理解的是,两把key可以互相加解密。具体哪把key加密,哪把key解密是根据使用场景来说的。以下内容引用自阿里云官方文档

    通过加密算法得到的密钥对可以保证在世界范围内是唯一的。使用密钥对的时候,如果用其中一个密钥加密一段数据,只能使用密钥对中的另一个密钥才能解密数据。例如:用公钥加密的数据必须用对应的私钥才能解密;如果用私钥进行加密也必须使用对应的公钥才能解密,否则将无法成功解密

  • 以下内容引用自阿里云官方文档

    每个用户自己设定一把特定的、仅为本人所知的私有密钥(私钥),并用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。

    由于密钥仅为本人所有,可以产生其他人无法生成的加密文件,也就是形成了数字签名

  • 根据以上内容,当我们把公钥告诉别人的时候,对方使用我们的公钥加密我们直接的信息,由于只有我们得私钥才能解密,所以即使这个信息丢失或者被盗,其他人也无法知道原始信息是什么,这就解决了上述所说的隐私性、安全性的问题

  • 数据完整性如何保证呢?以下内容引自Linux公社

    当加密数据时,使用单向加密算法,通过hash函数计算出数据独一无二的校验码,这个校验码称为“信息摘要(Message Digest)”。
    对于数据来源可靠性,使用自己的私钥加密即可验证身份,因为获得数据后使用公钥不能解密的就证明数据不是配对私钥加密的。但是私钥加密速度慢,所以只用私钥加密摘要信息,加密后的摘要信息称为“数字签名(Signature)”

  • 根据以上内容,当我们用私钥对数据的信息摘要进行加密时,所有拥有我们公钥的人都可以解密获得这部分信息摘要,这是告诉对方,这条信息确确实实来自于我。

  • 为了加深公钥和私钥的使用,可以使用在线网站自己体验一下,这里有一个体验RSA加解密的网站

CA机构和证书

不管是对称加密还是非对称加密,都有一个问题是如何解决中间人攻击?

于是引入信任的第三方机构来解决, 来自keystore文档中的解释

In a large-scale networked environment, it is impossible to guarantee that prior relationships between communicating entities were established or that a trusted repository exists with all used public keys. Certificates were invented as a solution to this public key distribution problem. Now a Certification Authority (CA) can act as a trusted third party

可以看到,CA机构主要的作用就是告诉客户端连接的是真正的想要通信的服务端,而不是中间人所伪造出来的。

但是问题又来了,中间人攻击既然可以冒充服务器,为什么不能冒充CA机构呢?

如何解决客户端和CA机构之间的信任问题?

当CA机构把证书返回给客户端时,客户端要使用CA机构的公钥去验证该证书的数字签名是不是真的CA机构签发的。那CA机构的公钥也很多吗?

这带来几个疑问

  1. 等等…这不又是服务端(CA机构)、客户端的问题了?为了防止套娃,CA机构包含公钥的证书都是默认安装在操作系统里的,CA机构毕竟不是很多,可以直接预置
  2. 这里也同时说明了在这一阶段为什么要用非对称加密,假设用的对称加密,那CA机构的密钥一旦被破解,那么都可以冒充CA机构,后果不可想象。

使用Java的keytool生成公钥和私钥和自签名证书

快捷命令

keytool -h

下列命令会生成密钥对和自签名证书

keytool -genkey -alias tomcat -keyalg RSA

genkey和genkeypair是一样的

The command uses the default SHA256withRSA signature algorithm to create a self-signed certificate that includes the public key and the distinguished name information. The certificate is valid for 180 days

默认生成的文件名是.keystore,引用自Keytool文档说明

For example, if keytool -genkeypair is called and the -keystore option isn’t specified, the default keystore file named .keystore is created in the user’s home directory if it doesn’t already exist

使用可视化工具KeyStore Explorer生成

除了keytool,我一般使用KeyStore Explorer直接点点点生成,毕竟各种命令太多也记不住,不如直接用鼠标点一点来的方便
在这里插入图片描述

为Tomcat配置TLS/SSL

  • 把Tomcat中conf/server.xml中下面这部分代码注释放开,并在IDEA中Tomcat HTTPS Port配置8443
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate 
            	certificateKeystoreFile="${user.home}/.keystore"
      			certificateKeystorePassword="changeit"
      			type="RSA" />
        </SSLHostConfig>
    </Connector>
    

Tomcat配置SSL的官方完整文档

配置SSL并使用自签名证书之后不生效

Tomcat重启之后,打开浏览器访问 https://localhost:8443/validation/,还是提示
在这里插入图片描述
对于自签名证书,我们需要将其导入到操作系统的指定位置

  1. 导出自签名证书
    keytool -export -alias tomcat -keystore .keystore -file tomcat.cer
    
  2. Mac OS中 > 钥匙串访问 > 将导出的证书拖到这里 > 双击证书 > 展开信任这一级 > 设置信任级别为始终信任
    在这里插入图片描述
  3. 设置完毕,重启Tomcat,HTTPS访问,发现Chrome这次提示不包含主备选名,但是Safari浏览器这次是正常的。

解决Chrome浏览器对自签名证书的不包含主备选名的问题

经过查找资料,对于自签名证书,要设置SubjectAlternativeName,

  • Stackoverflow问题一,the-certificate-for-this-site-does-not-contain-a-subject-alternative-name-extens
  • Stackoverflow问题二,how-are-ssl-certificate-server-names-resolved-can-i-add-alternative-names

于是重新删除刚刚生成的key以及导出的证书,重新生成一次

keytool -genkey -alias tomcat -keyalg RSA -ext san=IP:127.0.0.1,DNS:localhost

关于san的写法完整说明,见keytool文档中supported named extension部分

生成完毕,再次导出证书、将其添加到操作系统的指定位置、信任该证书。再次重启Tomcat,再次访问https://localhost:8443/validation/
在这里插入图片描述
这次就是我们所期望的,看到了🔐标志

有了HTTPS后的世界

配置好HTTPS之后,我们再次尝试用WireShark抓包

这次我们请求的是https

curl -X POST -k https://localhost:8443/validation/valid/inline/post

WireShark抓到的包

tls and tcp.port in {8443, 55026}

在这里插入图片描述
可以看到,我们通过WireShark抓到的包都是加密的了,再也看不到裸奔的数据了。

本篇文章简单梳理了一下自己在理解TLS以及公钥、私钥以及CA证书等各个概念时疑问,以及思考。

下一篇将进行TLS握手详细分析

参考资料

  1. Java keytool文档,重点阅读Terms部分,这一部分介绍了各种概念,包括什么是keystore?什么是keystore的entry?什么是alias?什么是证书?什么是证书链?
  2. digicert的文章,什么是SSL/TLS?
  3. digicert的文章,什么是SSL证书?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/98169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图转超图 Graph convert toHypergraph

图转超图 DHT 介绍那么它有啥用呢&#xff1f; 这个实在太好玩了&#xff0c;参考的这个论文&#xff1a; EHGNN 采用的方法叫 Dual Hypergraph Transformation (DHT)&#xff0c;主要就是把一个 graph 转为 hypergraph DHT 介绍 如何将 graph 转 hypergraph 的呢&#xff1…

基于鹈鹕算法优化的BP神经网络(预测应用) - 附代码

基于鹈鹕算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于鹈鹕算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.鹈鹕优化BP神经网络2.1 BP神经网络参数设置2.2 鹈鹕算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

软考:中级软件设计师:无线网,网络接入技术,ipv6

软考&#xff1a;中级软件设计师:无线网 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#x…

React面向组件编程

往期回顾&#xff1a;# React基础入门之虚拟Dom【一】 面向组件编程 react是面向组件编程的一种模式&#xff0c;它包含两种组件类型&#xff1a;函数式组件及类式组件 函数式组件 注&#xff1a;react17开始&#xff0c;函数式组件成为主流 一个基本的函数组件长这个样子 …

IDEA软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 IntelliJ IDEA是一款流行的Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;由捷克软件开发公司JetBrains开发。它专为Java开发人员设计&#xff0c;提供了许多高级功能和工具&#xff0c;使得开发人员能够更高效地编写…

文件传输协议

文章目录 一、FTP1. 定义2. 端口3. 数据传输方式主动方式被动方式 二、TFTP三、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、FTP 1. 定义 文件传输协议&#xff08;FTP&#xff09;是一种用于在客户端和服务器之间进行文件传输的标准网络协…

一文讲通物联网嵌入式

最近有很多同学问我&#xff0c;物联网近几年一直是科技的热点&#xff0c;嵌入式和物联网有什么关系呢&#xff1f;我在这里统一给大家讲解一下。 嵌入式是应用于物联网产品方向的一种嵌入式操作系统。类似于Android系统是谷歌开发的移动操作系统&#xff0c;嵌入式实际上也是…

想知道期权买认购和卖认沽有何不同?赶快来看!

期权买认购和卖认沽这个都是做多的意思&#xff0c;看涨做多的意思&#xff0c;买认购是买方做多&#xff0c;无保证金&#xff0c;没有爆仓风险&#xff0c;涨跌幅无限制&#xff0c;卖认沽是卖方做多&#xff0c;需要保证金交易&#xff0c;会爆炸&#xff0c;收益是锁定的&a…

SSH远程连接macOS服务器:通过cpolar内网穿透技术实现远程访问的设置方法

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

机房安全之道:构筑坚固的网络防线

引言&#xff1a; 在数字化时代&#xff0c;机房成为了许多组织和企业的核心基础设施&#xff0c;承载着重要的数据和应用。然而&#xff0c;随着网络攻击日益猖獗&#xff0c;机房的安全性显得尤为重要。本文将深入探讨如何构建坚固的网络防线&#xff0c;保护机房免受攻击的方…

光伏电站、变电站、等直流系统电参量测量仪器怎么选型

安科瑞虞佳豪 壹捌柒陆壹伍玖玖零玖叁 应用场景 工作拓扑图 功能 ①对电能参数进行采样计量和监测&#xff0c;逆变器或者能量管理系统&#xff08;EMS&#xff09;与之进行通讯&#xff0c;根据实时功率及累计电能实现防逆流、调节发电量、电池充放电等功能&#xff1b; ②…

STM32--SPI通信与W25Q64(2)

STM32–SPI通信与W25Q64&#xff08;1&#xff09; 文章目录 SPI外设特征 SPI框图传输模式主模式全双工连续传输 非连续传输硬件SPI读写W25Q64 SPI外设 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担。 特…

2023.8各大浏览器11家对比:Edge/Chrome/Opera/Firefox/Tor/Vivaldi/Brave,安全性,速度,体积,内存占用

测试环境&#xff1a;全默认设置的情况下&#xff0c;均在全新的系统上进行测试&#xff0c;系统并未进行任何改动&#xff0c;没有杀毒软件&#xff0c;浏览器进程全部在后台&#xff0c;且为小窗模式&#xff0c;小窗分辨率均为浏览器厂商默认缩放大小(变量不唯一)&#xff0…

Window基础命令

文章目录 查看哪些端口被禁用TCP协议删除开机启动项方案1方案2 查看哪些端口被禁用TCP协议 netsh interface ipv4 show excludedportrange protocoltcp删除开机启动项 方案1 列出所有启动项 bcdedit /enum仔细看你要删除的是哪一项&#xff08;看description&#xff09;&a…

【LeetCode: 56. 合并区间+贪心+双指针+标识+模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

postgresql类型转换函数

postgresql类型转换函数 简介CAST 函数to_date 函数to_timestamp 函数to_char 函数to_number 函数隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型&#xff1b;Post…

稳恒电路直观理解

图v0 图v1 图v2 图v3 图v4 自由正电荷s&#xff0c;定向移动过程中&#xff0c;在任何一位置处受力都是平衡的&#xff0c;即s所受总合力为0&#xff0c; 即s处于匀速运动&#xff1a;直导体中匀速直线运动、拐弯处匀速圆周运动 起初t0时刻, s的势能是最高的E0&#xff0c;之…

MyBatisPlus实现多租户功能

前言&#xff1a;多租户是一种软件架构技术&#xff0c;在多用户的环境下&#xff0c;共有同一套系统&#xff0c;并且要注意数据之间的隔离性。 一、SaaS多租户简介 1.1、SaaS多租户 SaaS&#xff0c;是Software-as-a-Service的缩写名称&#xff0c;意思为软件即服务&#x…

ThinkPHP 文件上传 fileSystem 扩展的使用

ThinkPHP 文件上传 ThinkPHP 文件上传 扩展 filesystem一、安装 FileSystem 扩展二、认识 filesystem 配置文件 config/filesystem.php三、上传验证&#xff08;涉及到验证器的知识点&#xff09;四、文件上传demo ThinkPHP 文件上传 扩展 filesystem ThinkPHP 为我们 提供了 …

WebRTC之FEC前向纠错协议

FEC前向纠错用于丢包恢复&#xff0c;对媒体包进行异或或其他算法生成冗余包进行发送。如果接收端出现丢包&#xff0c;可以通过冗余包恢复出原始的媒体包。FEC的代价是增加码率带宽&#xff0c;所以一般会根据网络状况、丢包率来动态调整FEC冗余系数&#xff0c;也会结合NACK/…