tls原理和基本应用

334 阅读4分钟
TLS基本概念原理
  • TLS依赖于两种加密技术
  1. 对称加密:加密方和解密方共享一个密钥K,但只要攻击者知道密钥K之后就能伪装成任意一个对象,进行中间人攻击。
  2. 非对称加密:使用两个成对的密钥k1、k2,加密者使用一个加密,解密者可以使用另一个解密。 缺点:有如下场景可以对该加密进行攻击。
  • 解密者生成了一对密钥,私钥用于解密,公钥公开用于消息发送者对发送的消息进行加密。
  • 但是攻击者可以自己截获该公钥,自己生成一对密钥,将自己生成的公钥发送给消息加密者,再拦截收到的用自己公钥加密的消息,再解密获得该消息。并将自己的消息用截获公钥加密发给解密者。
  • 或者直接拦截发消息经过公钥加密发送的消息,不让其到达解密的一方。自己再随意加密消息发送给解密者。
  • 都会导致不能正确解析密文,不能正确进行消息传输。 数字签名和CA则进一步确定信息发送方身份。

优点:接收方收到信息可以判断信息是否被破坏、信息的完整性,并且可以发现任何篡改。

原理:举例小黑与小白之间通信,有两个密钥分别为私钥k1、公钥k2,小白用k2加密信息发送给小黑,小黑用密钥k1解密获得消息,那么如何确定不会出现非对称加密中被攻击的现象呢,即小白收到的公钥k2为小黑发送给他的呢?这就用到了数字签名技术和CA技术。

  1. 小黑把自己的公钥和ID(身份证明或者域名)合为身份证申请(CSR)。
  2. 小黑把CSR发送给一个中间人(CA),比如说小亮。
  3. 小亮用自己的私钥加密CSR的信息得到数字签名signature
  4. 小亮把CSR明文和signature和在称为CA签署的身份证CRT

当小白与小黑通信时(建立HTTPS连接)的时候,小黑会亮出CA给小黑签署的身份证CRT,小白拿到小黑的CRT,如果小白信任CA小亮,在自己机器上面安装了小亮的身份证,就可以进行如下操作:

  1. 从小亮的身份身份证中拿出小亮的公钥。
  2. 用小亮的公钥解密小黑CRT中的Signiture得到CSR,如果得到的CSR与明文CSR相同,则表明小黑的身份证是正确的经过小亮签名的,没有被修改过。表示安全可以建立链接。 CA第三方机构的身份很重要,必要要值得信任

如果不信任第三方机构CA1则可以找一个都信任的CA2,将CA1用CA2进行签名,在进行验证的时候CA1对小黑进行签名,在将自己让CA2进行签名一起给小白。小白不信任CA1但是信任CA2,用CA2验证CA1发现CA1可信,再对小黑身份进行验证,得到正确的既可。其中就产生了一条信任链。

信任链有一个顶端,那就是根身份证(root CA)。根身份证是自己签名的,实际上都可以实现自己签名认证的身份证,即自签身份证。过程:

  1. 生成一对秘钥,公钥k2、私钥k1。
  2. 创建自己的CSR
  3. 用自己的私钥加密CSR生成签名,然后把CSR和signature一起发布-CRT。

任何人只要信任我们自签身份证CRT,也就可以用CRT.CSR.K2作为公钥加密要传输的数据,这样我们就可以根据私钥解密数据。

上述使用CA和签名认证成功之后就会使用相同的算法生成相同的密钥建立对称加密传输,这就建立安全的连接

Tls握手过程

image.png

实例:双方认证对方身份

  1. 创建CA
  • 自己创建CA私钥
openssl genrsa -out ca.key 2048
  • 创建CA的CSR并用自己的私钥签署得到CA的CRT
openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=we-as-ca"

image.png

2.利用创建的CA,给server颁发证书

  • 创建server的私钥、CSR并用ca的私钥签署证书CRT
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=localhost"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

image.png 3. 利用CA给client签署身份证

  • 创建clitent的私钥、CSR、并用CA签署证书CRT
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/CN=localhost"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365

image.png

下一步我们就可以利用上述证书开启TLS服务: 开启监听443端口请求。

image.png 第一个参数为监听端口号、第二位CA证书、第三个和第四个分别为服务器证书和私钥。 ListenTls具体实现:

image.png 开启服务:

image.png

当用postman测试,不带客户端证书时候报错:

image.png

为访问配置上证书再进行测试:

image.png

访问成功并返回数据: 屏幕截图 2022-04-08 112058.jpg