前言:

说到https应该已经很熟悉了,他与http有何区别呢? 答:https更安全,因为使用了tls协议,即有证书认证的操作,具体是一种怎样的交互呢,让我们细细道来。

0,数字证书以及网络传输加密

     假设,有两个人,一个叫 小起,一个叫 小终,小起想给小终发送数据,可是怕别人截取,篡改等等一些不安全的行为,于是经历了如下的演变过程,直到最后得到了最完美的加密过程。

 stage1: 对称加密

          小起     ----------将数据加密,并带着能解密的钥匙,一起交给小终   -----------> 小终

          问题:传输的过程中,钥匙可能被盗

 stage2:非对称加密

          小终:自己有一个秘钥对,公钥:对外公开;    私钥:自己保留;    由公钥加密的数据只能由私钥解密,由私钥加密的内容只能由公钥解密

          小起     ----------将数据用小终的公钥加密,交给小终   -----------> 小终(用小终自己的私钥解密)

          问题:传输的过程中,有人将数据截获,搞一堆烂七八糟的内容重新用小终的公钥加密,再发给小终。

 stage2进阶:签名技术的应用

      利用hash算法不可逆的特性,将正文数据进行hash计算得到摘要,当小终收到正文后同样hash计算,如果二者相同说明数据是完整的。
   同时,小起还要告诉小终,这个摘要是我计算的,可不是别人计算的的。

           小起 -----------------1)就数据用小终的公钥加密; -------------------------------------------------------------------> 小终(用自己的公钥解密数据,用小起的公钥解密签名)
                                        2)将数据用hash算法计算出摘要,并用小起的私钥对摘要进行加密(签名)

          问题:有人冒充是小起给小终发数据

 stage3:数字证书                  

          前面说了公钥/私钥都是自己家搞出来的东西,就算是被仿造了也不知道,于是将公钥"贴在第三方出具的正式文件上"(我们所说的签发数字证书)。这样就显得有保障,因为这个正式文件上可是有第三方盖章的。但同样还要能够识别这个"章"是真正权威机构的。具体原理是:

          小起,小终    <-----------从ca那里获取两样:根证书(“印章”图样),公钥(数字证书)私钥对---------CA中心(证书颁发机构)

          小起 (用根证书校验小终的数字证书)   <---------交换数字证书 -----------> 小终(用根证书校验小起的数字证书)

 整合:对称加密结合非对称加密

     考虑到效率问题,真正的业务数据是用对称加密算法加密的。所以综合以后,过程是这样的:
     通过stage3,我们现在互相已经有了对方准确的公钥,然后通过stage2的数据交换协商出对称加密秘钥自己保存好,再用stage1的对称加密算法(此时不需要携带解密秘钥)加密数据

          小起   --------- 用对称加密算法加密的数据-----------> 小终

 

 1,tls的握手前的准备 

       所谓的握手,其实就是我们在上一节讲述的“对称加密秘钥”的协商过程,所以再协商之前双方要先去向CA机构发请求,获得数字证书和根证书,而这个CA机构可以是自己,只要在集群范围内大家认可就可以了,所以我们通过cfssl工具生成证书,当然也可以用openssl工具。

      以下列出了步骤,有些细节可以参考这里:https://blog.csdn.net/xxb249/article/details/79449434

1)安装cfssl

curl -s -L -o /bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
curl -s -L -o /bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 
curl -s -L -o /bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 
chmod +x /bin/cfssl*

 

2)写根证书的配置文件

#mkdir -p /etc/kubernetes/apiserver/
#cd /etc/kubernetes/apiserver/

//利用命令先生成一个缺省的样板的请求文件
#cfssl print-defaults config > ca-config.json ----
#cfssl print-defaults csr > ca-csr.json ----修改配置,配置请求文件.csr应该是什么样子的

  //根据自己的情况修改配置,ca-config.json中可以同时定义多个配置簇,一个配置簇对应一种类型的数字证书的各项参数
  #vi ca-config.json
  #vi ca-csr.json

我的配置文件供参考

认证的原理与数字证书&爬坑
[root@master test]# cat ca-config.json 
{
    "signing": {
        "default": {
            "expiry": "43800h"
        },
        "profiles": {
            "client": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "server": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2021-12-25
猜你喜欢
  • 2022-12-23
  • 2022-03-11
  • 2021-12-13
相关资源
相似解决方案