[toc]
本文严重抄袭至互联网
傻傻分不清楚的kubernetes证书
kubeadm 生成的一坨证书是不是让人很蒙逼,这些东西没那么神奇,来深入扒扒其内裤。
root@k8s-master:/etc/kubernetes/pki# tree
.
|-- apiserver.crt
|-- apiserver-etcd-client.crt
|-- apiserver-etcd-client.key
|-- apiserver.key
|-- apiserver-kubelet-client.crt
|-- apiserver-kubelet-client.key
|-- ca.crt
|-- ca.key
|-- etcd
| |-- ca.crt
| |-- ca.key
| |-- healthcheck-client.crt
| |-- healthcheck-client.key
| |-- peer.crt
| |-- peer.key
| |-- server.crt
| `-- server.key
|-- front-proxy-ca.crt
|-- front-proxy-ca.key
|-- front-proxy-client.crt
|-- front-proxy-client.key
|-- sa.key
`-- sa.pub
1 directory, 22 files
从RSA说起
要深入了解证书的作用,首先需要了解一些原理和具备一些基本知识,比如什么是非对称加密,什么是公钥,私钥,数字签名是啥等。先从RSA算法说起。
非对称加密会生成一个密钥对,如上面的sa.key sa.pub就是密钥对,一个用于加密一个用于解密。
明文 + 公钥 => 密文
密文 + 私钥 => 明文
那么此时没有私钥,就很难把密文解密。
进一步再详细看看其原理, 不想关注的可以跳过下面原理部分:
假设我们想加密一个单词Caesar, 先把它变成一串数字,比如Ascii码 X = 067097101115097114 这也就是我们需要加密的 明码。 现在来对X进行加密。
- 找两个很大 的质数 P 和 Q 计算他们的乘积 N = P * Q 再令M = (P - 1)(Q - 1)
- 找到一个数E满足E和M除了1以外没有公约数
- 找到一个数D满足E乘以D除以M余1, E * D mod M = 1
现在 E就是公钥,可以公开给任何人进行加密
D就是私钥,用于解密,一定要自己保存好
联系公钥和私钥的N是公开的, 为什么这个可以公开,就是因为根据P Q算出N很简单,但是把N分解成P Q两个大质数非常的难,所以公开了现有的计算机算力也很难破解
现在来加密:
pow(X,E) mod N = Y Y就是密文,现在没有D(私钥) 神仙也没法算出X(明文)
解密:
pow(Y,D) mod N = X X是明文,明文就出来了。
数学是不是很神奇,现在可认为 sa.key = D sa.pub = E
数字签名
假设你写一封信给老板,内容是"老板我崇拜你",然后让同事把信送给老板,怎么确定这信就是你写的,而且怎么防止同事送信过程中把信改成 "老板你是个SB"?
可以这样做,首先你生成一个密钥对,把公钥给老板,然后对信的内容做一个hash摘要,再用私钥对摘要进行加密,结果就是签名
这样老板拿到信之后用公钥进行解密,发现得到的hash值与信的hash值是一致的,这样确定了信就是你写的
所以数字签名是加密技术的一种运用,与完全加密信息的区别是这里信息是公开的,你的同事可以看到你吹捧老板。