当前位置:萝卜系统 > 硬件软件教程 > 详细页面

SSL / TLS相互认证(1)-SSL / TLS的工作原理

SSL / TLS相互认证(1)-SSL / TLS的工作原理

更新时间:2023-06-22 文章作者:未知 信息来源:网络 阅读次数:

根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。

ssl认证_saa认证与vde认证有什么区别_ssl证书 https ssl

本文的一部分:

什么是SSL,什么是TLS?官方说法是SSL是安全套接字层(secure sockets layer),TLS是SSL的后继者,称为传输层安全性(transport layer security). 说穿了,就是在明文的上层和TCP层之间增加一层加密,以保证上层信息传输的安全性. 例如,HTTP协议以纯文本格式传输,并且在添加SSL层之后,有一个优雅的名称HTTPS. 其唯一目的是确保用于上层通信安全性的一组机制. 它的发展又经历了以下时期. 像手机软件的升级一样,每次更新都会添加或删除功能,例如引入新的加密算法和修改握手方法.

SSL1.0: 已废除

SSL2.0: RFC6176已被取消

SSL3.0: RFC6101,基本上已取消

TLS1.0: RFC2246,其中大多数当前使用此方法

TLS1.1: RF346

TLS1.2: RFC5246,未广泛使用

TLS1.3: IETF正在酝酿中

接下来,我们将介绍TLS1.x如何确保通信安全.

如何确保安全?您是说安全性是安全的,如何实现?绝对安全吗?

哈,有人民,有江湖,有江湖,没有绝对的安全. 但是SSL / TLS确实可以在很大程度上保证信息安全. 以下是基于图1中的SSL / TLS工作流的实现过程的概述.

SSL workflow

图1 SSL / TLS工作流程

CA: 证书颁发机构. 它类似于国家出入境管理部门,后者向他人发行护照. 它也类似于国家工商行政管理总局,后者向公司颁发营业执照.

它具有两个主要属性:

1)CA本身是受信任的// //国际认可的

2)向受信任的申请人颁发证书//与护照一样,要确定您的合法身份,您不能是分子或叛乱分子. 当然,您需要受到保护,同时ssl认证,CA可以随时吊销您的证书.

证书是什么样的?实际上,您的计算机中有一堆CA证书. 你可以看看吗:

360浏览器: 选项/设置->高级设置->隐私和安全性->管理HTTPS / SSL证书->证书颁发机构

Firefox浏览器: 首选项->高级->证书->查看证书->证书颁发机构

chrome浏览器: 设置->高级->管理证书->授权中心

ssl认证_ssl证书 https ssl_saa认证与vde认证有什么区别

ubuntu: / etc / ssl / certs

这些是CA证书!

CA的证书ca.crt与SSL服务器的证书server.crt之间有什么关系?

1)SSL Server自己生成一个私钥/公钥对. server.key / server.pub //私钥加密,公钥解密!

2)server.pub生成请求文件server.req. 请求文件包含一些服务器信息,例如域名/申请人/公共密钥等.

3)服务器将请求文件server.req提交给CA. CA验证正确之后,它将使用ca.key和请求文件来生成server.crt

4)由于ca.key和ca.crt是一对,因此ca.crt可以解密server.crt.

在实际应用中: 如果SSL客户端要验证SSL服务器,则SSL服务器必须将其证书server.crt传递给客户端. 然后,客户端使用ca.crt来验证server.crt的合法性. 如果这是网络钓鱼网站,则CA将不会向他颁发有效的server.crt证书,因此客户端将使用ca.crt进行验证,并且它将失败. 例如,如果浏览器是客户端,则您想访问合法的淘宝网站,但如果您不小心访问了该浏览器,则浏览器将检查此假淘宝网络钓鱼网站的非法性,并提醒用户不要继续访问!这样,可以确保客户端的所有https访问都是安全的.

什么是SSL / TLS单向认证和双向认证?

单向身份验证意味着只有一个对象可以验证对等证书的有效性.

通常使用客户端来验证服务器的合法性. 然后客户端需要一个ca.crt,服务器需要server.crt,server.key

双向认证是指相互验证. 服务器需要验证每个客户端,客户端也需要验证服务器.

服务器需要server.key,server.crt,ca.crt

客户端需要client.key,client.crt,ca.crt

证书工作流

图2证书详细工作流程

1)申请认证: 服务器需要生成公钥和私钥对pub_svr和pri_svr,并同时根据pub_svr生成请求文件csr并将其提交给CA. csr包含公钥,组织信息,个人信息(域名)和其他信息. (图1中的server.req是csr请求文件)

2)审核信息: CA通过各种方式(例如,组织是否存在,企业是否合法以及它是否拥有域)来验证申请人提供的信息的真实性,例如和离线名称.

3)颁发证书: 如果信息得到批准,则CA将向申请人颁发认证文件证书.

证书包含以下信息: 申请人的公钥,申请人的组织信息和个人信息,发行机构CA的信息,有效时间,证书序列号等信息,还包含签名.

签名生成算法: 首先,使用哈希函数来计算公共明文信息的信息摘要,然后使用CA的私钥对信息摘要进行加密,并且密文是签名. (server.crt在图1中生成)

4)返回证书: 如果客户端请求验证服务器,则服务器需要返回证书文件. (在图1中,握手返回到server.crt)

saa认证与vde认证有什么区别_ssl证书 https ssl_ssl认证

5)客户端验证证书: 客户端读取证书中的相关明文信息,使用相同的哈希函数计算消息摘要,然后使用CA的相应公钥对签名的数据进行解密,并对证书进行比较消息摘要,如果相同ssl认证,则可以确的有效性,即公钥合法. 然后,客户端将验证与证书有关的域名信息,是否取消了有效时间等.

客户端将具有内置的受信任CA证书信息(包括公共密钥). 如果不信任CA,则找不到相应CA的证书,并且该证书也将被确定为非法. (在图1中,检查是可选的,我们可以选择不验证服务器证书的有效性)

6)秘密密钥协商: 验证后,服务器和客户端将进行秘密密钥协商. 接下来,服务器和客户端将使用对称密钥加密. (对称的加密时间性能非常出色)(图1中的pre-master / change_cipher_spec / encrypted_handshake_message过程)

7)数据传输: 服务器和客户端使用对称密钥来加密和解密数据.

单项认证

客户端发起一个请求,以明文形式发送请求信息,包括版本信息,密码套件候选列表,压缩算法候选列表,随机数,扩展字段和其他信息. 相关信息如下:

客户端计算所有接收到的信息的哈希值,并使用协商后的密钥对crypted_handshake_message进行解密,验证服务器发送的数据和密钥,并在验证后完成握手;

开始使用协商的密钥和算法进行加密通信.

这里写图片描述

我们构建的SSL / TLS服务器为192.168.111.100,客户端为192.168.111.101. 客户端需要验证服务器的合法性.

我们只查看TLSv1.1数据包:

第一个程序包(第25个)Client Hello程序包,即SSL / TLS单向身份验证过程的(1)

第二个软件包(第27号)服务器Hello软件包,包括服务器证书等. 这是SSL / TLS单向身份验证过程的(2)

第三包(第28号)服务器证书验证完成,并且客户端密钥交换+更改密码规范+加密握手消息同时发送. 这就是SSL / TLS单向身份验证过程的(4)

第四包(第29号)密钥协商,更改密码规范+加密的hanshake消息. 即SSL / TLS单向身份验证过程的(5)

第五个数据包(第30个)握手完成. 开始上层数据传输. SSL / TLS单向身份验证过程(7)

它与单向身份验证几乎相同,除了客户端对服务器证书进行身份验证之后,客户端会将自己的证书client.crt传递给服务器. 服务器通过身份验证后,密钥协商开始.

实际的wireshark分析:

这里写图片描述

与单向身份验证相同:

我们构建的SSL / TLS服务器为192.168.111.100,客户端为192.168.111.101. 客户端需要验证服务器的合法性,服务器还需要验证客户端的合法性!

我们只查看TLSv1.1数据包:

ssl认证_saa认证与vde认证有什么区别_ssl证书 https ssl

第一个程序包(第55号)Client Hello程序包,即SSL / TLS单向身份验证过程的(1)

第二个软件包(第57号)服务器Hello软件包,包括服务器证书等. 这是SSL / TLS单向身份验证过程的(2)

第三包(第60号)服务器证书验证完成,并且同时发送客户端证书client.crt,其中还包括客户端密钥交换+更改密码规范+加密的握手消息. 也就是说,SSL / TLS单向身份验证过程(4)

第四包(第61号)服务器验证客户端证书的有效性. 通过密钥协商后,更改密码规范+加密的hanshake消息. 即SSL / TLS单向身份验证过程的(5)

重发数据包(第62号)由于网络原因,TCP重发了60号数据包.

第五个数据包(第64个)握手完成. 开始上层数据传输. SSL / TLS单向身份验证过程(7)

扩展名是什么,例如crt / key / req / csr / pem / der?

1).crt表示证书,.key表示私钥,.req表示请求文件,.csr表示请求文件,.pem表示pem格式,.der表示der格式.

您可以根据需要命名文件扩展名. 命名不同的扩展名只是为了了解需求. 但是,文件中的信息已格式化. 与exe和PE格式一样,证书有两种格式.

pem格式和der格式. 所有证书,私钥等可以是pem或der格式,具体取决于应用程序的需求.

pem和der格式可以相互转换:

    openssl x509 -in ca.crt -outform DER -out ca.der  //pem -> der
    openssl x509 -inform der -in ca.der -out ca.pem    // der -> pem

pem格式:经过加密的文本文件,一般有下面几种开头结尾: 

    -----BEGIN RSA PRIVATE KEY-----
    -----END RSA PRIVATE KEY-----
    or:
   -----BEGIN CERTIFICATE REQUEST-----
   -----END CERTIFICATE REQUEST-----
    or:
   ----BEGIN CERTIFICATE-----
  -----END CERTIFICATE-----

der格式: 加密的二进制文件.

2)证书包含申请人的公钥,申请人的组织信息和个人信息,发证机关的CA信息,有效期,证书序列号和其他纯文本信息,还包含签名. 例如,查看百度证书的详细信息.

a)首先下载百度证书

要访问Firefox浏览器,请单击左上角的绿色小锁,单击向右箭头,单击更多信息,单击以查看证书,单击详细信息,然后单击导出. 您可以导出百度的证书baiducom.crt

b)查看证书详细信息的命令

openssl x509 -noout -text -in baiducom.crt

baiducert

在详细信息中,存在一个字段: X509v3基本约束: CA: FALSE

ssl认证_ssl证书 https ssl_saa认证与vde认证有什么区别

此字段指示证书是CA证书还是常规的非CA证书. 有关详细说明,请参阅RFC5280#section-4.2.1.9,并且RFC5280还详细介绍了证书的工作方法.

3)私钥加密,公钥解密!

SSL / TLS是一个工作原理,openssl和mbedtls是SSL / TLS的特定实现,非常类似于TCP / IP协议和套接字之间的关系.

我们使用makefile.sh脚本在本地创建一个CA(ca.crt + ca.key),并使用该CA分别向服务器和客户端颁发证书.

makefile.sh

# * Redistributions in binary form must reproduce the above copyright
#   notice, this list of conditions and the following disclaimer in the
#   documentation and/or other materials provided with the distribution.
# * Neither the name of the axTLS project nor the names of its
#   contributors may be used to endorse or promote products derived
#   from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
# Generate the certificates and keys for testing.
#
PROJECT_NAME="TLS Project"
# Generate the openssl configuration files.
cat > ca_cert.conf << EOF  
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no
[ req_distinguished_name ]
 O                      = $PROJECT_NAME Dodgy Certificate Authority
EOF
cat > server_cert.conf << EOF  
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no
[ req_distinguished_name ]
 O                      = $PROJECT_NAME
 CN                     = 192.168.111.100
EOF
cat > client_cert.conf << EOF  
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no
[ req_distinguished_name ]
 O                      = $PROJECT_NAME Device Certificate
 CN                     = 192.168.111.101
EOF
mkdir ca
mkdir server
mkdir client
mkdir certDER
# private key generation
openssl genrsa -out ca.key 1024
openssl genrsa -out server.key 1024
openssl genrsa -out client.key 1024
# cert requests
openssl req -out ca.req -key ca.key -new \
            -config ./ca_cert.conf
openssl req -out server.req -key server.key -new \
            -config ./server_cert.conf 
openssl req -out client.req -key client.key -new \
            -config ./client_cert.conf 
# generate the actual certs.
openssl x509 -req -in ca.req -out ca.crt \
            -sha1 -days 5000 -signkey ca.key
openssl x509 -req -in server.req -out server.crt \
            -sha1 -CAcreateserial -days 5000 \
            -CA ca.crt -CAkey ca.key
openssl x509 -req -in client.req -out client.crt \
            -sha1 -CAcreateserial -days 5000 \
            -CA ca.crt -CAkey ca.key
openssl x509 -in ca.crt -outform DER -out ca.der
openssl x509 -in server.crt -outform DER -out server.der
openssl x509 -in client.crt -outform DER -out client.der
mv ca.crt ca.key ca/
mv server.crt server.key server/
mv client.crt client.key client/
mv ca.der server.der client.der certDER/
rm *.conf
rm *.req
rm *.srl 

将以上代码另存为makefile.sh

进行以下修改,并执行终端.

-将CN域中的IP地址更改为主机/设备的IP地址

-[可选]将加密数字1024更改为所需的加密数字

您将看到:

ssldir

ca目录: 保存ca的私钥ca.key和证书ca.crt

certder目录: 将证书另存为二进制文件,例如client.der server.der

客户端目录: client.crt client.key

服务器目录: server.crt server.key

$./makefile.sh

删除脚本rmfile.sh:

rm ca/ -rf
rm certDER/ -rf
rm client/ -rf
rm server/ -rf

将上述代码另存为rmfile.sh并在终端中执行,这将删除生成的目录和文件:

$./rmfile.sh

我们可以在本地使用CA证书来验证自己颁发的服务器证书server.crt和客户端证书client.crt.

$openssl verify -CAfile ca/ca.crt server/server.crt

$openssl verify -CAfile ca/ca.crt client/client.crt


本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-257141-1.html



温馨提示:喜欢本站的话,请收藏一下本站!

本类教程下载

系统下载排行

网站地图xml | 网站地图html