SSL和TLS简介
《Hexo启用https加密连接》和《CentOS7安装配置GitLab》中都涉及到了SSL/TLS,SSL和TLS是啥?
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
更多内容参考维基百科-传输层安全性协议
相关概念
PKI
公开密钥基础建设(英语:Public Key Infrastructure,缩写:PKI),又称公开密钥基础架构、公钥基础建设、公钥基础设施、公开密码匙基础建设或公钥基础架构,是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。
密码学上,公开密钥基础建设借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起。对每个证书中心用户的身份必须是唯一的。链接关系通过注册和发布过程创建,取决于担保级别,链接关系可能由CA的各种软件或在人为监督下完成。PKI的确定链接关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链接,可以防欺诈。在微软的公开密钥基础建设之下,注册管理中心(RA)又被叫做从属数字证书认证机构(Subordinate CA)。
更多内容参考维基百科-公开密钥基础架构
CA
数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
更多内容参考维基百科-证书颁发机构
数字证书
公钥证书(英语:Public key certificate),又称数字证书(digital certificate)或身份证书(identity certificate)。是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。拥有者凭着此文件,可向电脑系统或其他用户表明身份,从而对方获得信任并授权访问或使用某些敏感的电脑服务。电脑系统或其他用户可以透过一定的程序核实证书上的内容,包括证书有否过期、数字签名是否有效,如果你信任签发的机构,就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。
公钥证书包括自签证书、根证书、中介证书、授权证书、终端实体证书(TLS服务器证书和TLS客户端证书)。
更多内容参考维基百科-公钥证书
加密原理
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密。其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
TLS 的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。
例如,在 HTTPS 协议中,客户端发出请求,服务端会将公钥发给客户端,客户端验证过后生成一个密钥再用公钥加密后发送给服务端(非对称加密),双方会在 TLS 握手过程中生成一个协商密钥(对称密钥),成功后建立加密连接。通信过程中客户端将请求数据用协商密钥加密后发送,服务端也用协商密钥解密,响应也用相同的协商密钥。后续的通信使用对称加密是因为对称加解密快,而握手过程中非对称加密可以保证加密的有效性,但是过程复杂,计算量相对来说也大。
更多内容参考SSL/TLS 详解
自建CA并签发证书
《CentOS7安装配置GitLab》一文中,添加SSL一节详细描述了自建CA并签发SSL证书的过程。
更多内容,可以参考基于OpenSSL自建CA和颁发SSL证书和使用 OpenSSL 自建 CA 并签发证书。
k8s中证书管理
查看证书
1、查看证书位置
1 | ps aux | grep kubelet |
2、查看证书详情
1 | openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text |
签名
签名,或者签名过期后重新签名
1 | openssl x509 -req -in /etc/kubernetes/pki/apiserver-etcd-client.csr -CA /etc/kubernetes/pki/etcd/ca.crt -CAkey /etc/kubernetes/pki/etcd/ca.key -CAcreateserial -out /etc/kubernetes/pki/apiserver-etcd-client.crt |
通过API签名
1、为新用户创建证书
1 | openssl genrsa -out jane.key 2048 |
2、创建jane-csr.yaml文件
1 | apiVersion: certificates.k8s.io/v1beta1 |
3、签名请求并通过
1 | kubectl apply -f jane-csr.yaml |
或者,直接使用openssl命令进行签名:
1 | openssl x509 -req -in /root/jane.csr -CA /etc/kubernetes/pki/etcd/ca.crt -CAkey /etc/kubernetes/pki/etcd/ca.key -CAcreateserial -out /root/jane.crt |
PS:查看签名用的CA
1 | cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep ca.crt |
更多内容,参考Manage TLS Certificates in a Cluster。
证书格式转换
X.509是一种证书标准,定义了证书中应该包含哪些内容,详情参考RFC5280,SSL使用的就是这种证书标准。
同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式。
PEM:Privacy Enhanced Mail,BASE64编码,以”—–BEGIN—–”开头,”—–END—–”结尾。
查看PEM格式证书的信息:openssl x509 -in cert.pem -text -noout
DER:Distinguished Encoding Rules,二进制格式,不可读。
查看DER格式证书的信息:openssl x509 -in cert.der -inform der -text -noout
问题来了,k8s中的证书,除了使用pem格式,还有就是crt格式,并没有der格式啊?这是因为,crt只是一个文件后缀,编码格式可能是pem也可能是der。
那么,pem和der怎样互相转换呢?
1 |
|