近期涉及到了容器云集群证书过期的问题,故整理了一下证书相关的内容,k8s各证书作用待梳理
加密算法分为:对称加密和非对称加密
对称加密:加解密使用的密钥相同
非对称加密:使用成对出现的密钥,分别为公钥和私钥,同时遵守以下规则
1-使用公钥加密的数据只有对应的私钥才能解开
2-使用私钥加密的数据只有对用的公钥才能解开
3-如果可以用公钥解密,则必然是对应的私钥加的密
4-如果可以用私钥解密,则必然是对应的公钥加的密
对称加密(DES、AES):
假设S数据发送方,R为数据接收方,K0为对称加密的密钥
使用对称加密传输数据:R生成K0,因为对称加密使用同一密钥K0加解密,R需要将K0传送给S用于加密数据,在传送密钥K0的过程就存在K0被截获的可能,进而导致K0加密的数据泄漏。对称加密简单高效。
非对称加密(RSA):
假设S数据发送方,R为数据接收方,K1为非对称加密的公钥,K2为非对称加密的私钥
一、安全传输数据:R生成K1和K2,其中K1作为私钥自己保存,K2作为公钥发送给S,即使R传送K2给S的时候被窃取也没有影响,因为公钥K2原本允许被多人持有的,谁想安全发送数据给R都可以持有R生成的公钥K2,当S使用K2加密数据后,即使数据传输过程中被截获,根据上述非对称加密遵守的规则,由于数据只能私钥才能解且私钥只有R自己保存,数据也不会泄漏。非对称机密效率低。
二、对信息进行数字签名:S生成K1和K2,其中K1作为私钥自己保存,K2作为公钥发送给R。例如S想发送一个公告,S可以使用k1加密公告内容,发出的数据就能被R解开,也即验证了数据确实是S发过来的没有被篡改过,因为K2既然能解开,数据必然是K1加密的,而K1只有S持有,S不能抵赖。
非对称加密可以用于安全传输数据和对信息签名。
数字证书:
对于上述非对称加密的过程,仍然存在一个问题,比如在上述一过程中,发送方S收到的公钥确实是接收方R生成的(虽然公钥被其他人知道无所谓,但这个公钥得确保是R生成的):即可能一开始就存在假冒的接收方Rf自己生成私钥Kf1和公钥Kf2,并把Kf2发给发送方S,从此S就和Rf保持通信了。这种情况的根本问题就是:发送方S如何确保接收到的公钥是由真正的发送方R发过来的而不是假冒的Rf,这个时候数字证书就引入了。
1.生成私钥:
openssl genrsa -out testprivate.key 1024
2.利用私钥生成对应的公钥
openssl rsa -in testprivate.key -pubout -out testpublic.pem
3.CA机构介入生成证书
证书包含的内容:请求证书者的公钥、证书的所有者、证书的发布机构和有效期
3.1利用私钥生成证书请求
openssl req -key test.key -new -out testcertificate.req
3.2将证书请求给权威机构CA,CA将利用自己独有的私钥对证书请求签名
openssl x509 -req -in testcertificate.req -CA cacertificate.pem -CAkey caprivate.key -out testcertificate.pem
3.3查看CA签名之后的证书内容
openssl x509 -in testcertificate.pem -noout -text
这个时候S不会从R得到一个公钥,而是会得到一个证书C,C中有个发布机构CA,S只要得到这个发布机构 CA 的公钥,去解密R发过来的证书的签名内容,如果解密成功了,Hash也对的上,就说明R的公钥没有啥问题。此时即使有个假冒的Rf也向你发送一个证书Cf,Cf是没有被真正的CA的私钥签发的(比如假冒服务器自己生成公私钥来签发证书),这个时候利用Cf证书里面的CA机构的公钥解密证书签名内容,就无法解密了。
上面说道,S要得到这个发布机构CA的公钥,那要怎么确定CA的公钥就是对的呢
还是回到了一开始非对称加密过程中,S如何得到正确的R的公钥这个问题:CA 的公钥也需要更牛的 CA 给它签名,然后形成 CA 的证书。要想知道某个 CA 的证书是否可靠,要看 CA 的上级证书的公钥,能不能解开这个 CA 的签名。就像你不相信区公安局,可以打电话问市公安局,让市公安局确认区公安局的合法性。这样层层上去,直到全球皆知的几个著名大 CA,称为 root CA,做最后的背书。通过这种层层授信背书的方式,从而保证了非对称加密模式的正常运转。
注意:
1.上述过程只描述了S利用R生成的公私钥安全传输数据给R,R回复的信息仍然可以被截获泄漏,这需要R利用S生成的公私钥来安全传输数据给S,既这个是上述过程的逆过程。
2.为了兼顾对称加密的高效和非对称加密的安全,通常做法如HTTPS是先使用 非对称加密的方式 传输 对称加密的密钥,之后使用 对称加密的密钥 加密数据
3.浏览器访问https时,如果server端证书不是被公认权威机构签名的,比如自签证书,就会出现非安全链接提示。
参考链接:
https://songlee24.github.io/2015/05/03/public-key-and-private-key/
https://zhuanlan.zhihu.com/p/36832100