https、公钥,私钥,数字证书

摘要:
SSL使用公钥和私钥来确保客户端和服务器之间的通信加密。它使用公钥和私钥进行数据传输。当客户端向服务器发送请求时,客户端使用公钥解密并获取内容。当客户端向服务器发送数据时,它使用公钥来加密内容。然而,服务器发送给客户端的公钥一开始可能被第三方劫持,然后使用您自己的私钥加密数据并将其发送给客户端,客户端在接收到数据后使用公钥解密数据。在整个传输过程中,确保客户端接收到的公钥由服务器发送是当务之急。
前言

https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。

http和ssl

http是处于应用层的传输协议,ssl是处于与TCP同层的传输层和应用层之间的协议,由于http使用明文传输,就会导致数据在传输过程中泄露,为此将http和ssl两者结合后得到https。

使用公钥和私钥进行数据传输

当客户端发送请求到服务端的时候,将会收到服务端发送的公钥,服务器有对应的私钥; 服务端与客户端进行通讯的时候,使用私钥将数据进行加密传输,客户端使用公钥进行解密后获得内容,而客户端发送数据到服务端的时候会使用公钥将内容进行加密,服务器接收后使用私钥解密。

https、公钥,私钥,数字证书第1张

但是当一开始服务端发送的公钥到客户端的过程中有可能被第三方劫持,然后第三方自己伪造一对密钥,将公钥发送给客户端,当服务器发送数据给客户端的时候,中间人将信息进行劫持,用一开始劫持的公钥进行解密后,然后使用自己的私钥将数据加密发送给客户端,而客户端收到后使用公钥解密,反过来亦是如此,整个过程中间人是透明的,但信息泄露却不得而知。
https、公钥,私钥,数字证书第2张

数字证书

为了防止中间人攻击,整个传输过程中亟需解决的是保证客户端收到的公钥是服务端发送的,为此提出了数字证书,数字证书是由权威的CA机构给服务端进行颁发,CA机构通过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,公钥,签署者签名信息等,最重要的是公钥在数字证书中。

数字证书是如何保证公钥来自请求的服务器呢?数字证书上由持有人的相关信息,通过这点可以确定其不是一个中间人;但是证书也是可以伪造的,如何保证证书为真呢?
一个证书中含有三个部分:"证书内容(F1), 加密算法(A),加密密文(F3') ",三者的关系如下图,证书内容F1F会被散列算法SHA1计算出hash值F2,然后使用CA机构提供的私钥进行RSA加密
https、公钥,私钥,数字证书第3张

当客户端发起请求的时候,服务器将该数字证书发送给客户端,客户端将其中的加密密文(F3)通过CA机构提供的公钥及逆行解密后得到F2,同时将证书内容(F1)使用SHA1散列成F2,如果两者相等则说明证书没问题。
https、公钥,私钥,数字证书第4张

由于劫持者不知道当初加密使用的私钥是什么,所以永远无法伪造出一个正确的证书可以通过上述的验证,但仔细思考后发现,这个办法的核心是保证上图中提供RSA解密的公钥是绝对正确的,否则的话,劫持者可以改变到这个公钥的话,那伪造的证书也可以通过验证了,但我还不知道是如何保证这个公钥绝对没问题。部分的猜想是,由于这个公钥是相对固定的,部分操作系统在安装的时候这些公钥就被写进操作系统中,通过权限控制导致这个公钥很难被修改。

完整的https通信方式

当客户端接收了从服务端发送而来的数字证书,进行计算验证后发现证书没有问题,说明这个公钥是服务器发送的,从证书中获取服务端的公钥,就可以和服务器进行加密通信了。但是非对称加解密太耗费时间,因此客户端会发送一个对称密钥给服务端,由于这个密钥使用了公钥进行加密,只有服务端才能解开得到,往后服务端和客户端可以通过这个对称密钥进行高效的安全通讯。

其余

很多时候从CA机构获取的数字证书是要钱的,但简单的开发测试的时候可以自己创建数字证书,比如,此类证书使用的时候浏览器会报告不安全,是因为没有公钥无法验证,可以选择信任证书,或者是安装证书,其实是一个意思。

REF

http://www.techug.com/post/https-ssl-tls.html
https://www.cnblogs.com/funny11/p/6978908.html
https://www.cnblogs.com/yangxiaolan/p/6256838.html

免责声明:文章转载自《https、公钥,私钥,数字证书》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker push 报错:received unexpected HTTP status: 500 Internal Server Erroruniapp获取用户信息 getuserinfo下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Identityserver4配置证书

IS4中如果token的类型是JWT,则需要使用RS256算法生成非对称签名,这意味着必须使用私钥来签名JWT token,并且必须使用对应的公钥来验证token签名,即验证token是否有效。使用RS256可以保证IS4服务端是JWT的唯一签名者,因为IS4服务端是唯一拥有私钥的一方,前提是私钥不会被泄露。所以我们需要一个证书为我们提供私钥和公钥。在开发...

openssl知识点总结

openssl知识点总结 实践总结见之前博客:http://www.cnblogs.com/Jclemo/p/6091201.html 简介 openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、...

【Jenkins系列教程】流水线通过SSH方式操作Git仓库

主旨 实践 Jenkins 流水线使用SSH方式操作 Git 仓库,包含基于 SSH 私钥认证的服务器 准备 需要提前安装 SSH Agent Plugin,可以通过 Manage Jenkins-> Manage Plugins-> Installed 使用 filter 搜索查看是否安装,如没有则通过 Available处搜索安装 使用 本...

Netty游戏服务器之六服务端登录消息处理

客户端unity3d已经把消息发送到netty服务器上了,那么ServerHandler类的public void channelRead(ChannelHandlerContext ctx, Object msg) 就会触发, 所有我们在这里吧消息发送至各自处理的类,这里呢我根据不同的消息类型,定义了不同的消息分派类。如login消息就制定LoingDi...

ClickOnce 部署克服的主要问题 (清单签名的.pfx格式数字证书、"安装"后无反应的处理办法)

1、ClickOnce 部署 客户端点"安装"后无反应的处理办法:   ClickOnce 部署方式在客户端是由此文件支持的 dfshim.dll.. 在.net 2.0 framework 安装时,与 .application文件类型相关联... 浏览器在下载 .application文件后,会由 dfshim.dll交由 dfsvc.exe 打开,...

NFS配置使用

NFS配置使用 目录 NFS配置使用 一、概述 二、NFS服务器端安装和配置 2.1.服务端安装 2.2.服务端配置 2.3.防火墙安全配置 2.3.1.方案一、关闭防火墙或对内网所有端口开放 2.3.2.方案二、防火墙不关闭,开放指定端口号 2.4.启动NFS服务 三、NFS客户端安装和配置 3.1.客户端安装 3.2.客户端配置 3...