您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

OpenSSL

OpenSSL 是开源的软件库,里面包含了SSL协议库、应用程序以及密码算法库。通过这个工具我们可以实现自签名证书,也可以更好的了解证书的过程。

Linux 系统一般 OpenSSL 工具:

[root@instance-fk6xgagd ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

Window 环境到官网下载 exe 应用工具,并将 exe 应用配置到系统环境变量 Path 路径中即可。

OpenSSL 的命令可以分为以下3类

[root@instance-fk6xgagd ~]# openssl help
openssl:Error: 'help' is an invalid command.

Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            rc5               rc5-cbc           rc5-cfb           
rc5-ecb           rc5-ofb           seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          zlib

Kubernets 是开源的容器编排工具,它内部包含了多个职能组件。Kubernetes 提供了基于 CA 签名的双向认证和基于 HTTP BASE 或 TOKEN 的认证方式,其中 CA 是安全性最高的一种。(不了解 Kubernetes 的把他想成多组件服务的系统即可)

Kubernetes 有上图那么多组件,具体每个组件的用途我们这里不用去了解,其中 ApiServer 是核心服务。

图中服务需要的证书:

各个服务都需要双向认证,所以每个服务都需要有自己的证书,证书是需要向 CA 申请的,所以我们要先制作 CA 根证书。

先根证书,这个根证书后续将用于为每个组件属于他们的证书。

# openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sub "/CN=k8s-master" -days 5000 -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -sub "/CN=k8s-master" -con master_ssl.cnf -out server.csr

其中 master_ssl.cnf 主要包含了请求主体的一些基础信息,这边主要是服务器所在节点的主机名,IP 地址。这些信息后面也会到证书里面,像 IP 地址后续也可以作为校验使用。

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt

证书的时候都需要借助 CA ,CA用自己的私钥签名证书,把公钥开放出去,供验证者使用。

到此,我们已经总的已经了 5 个,回顾下它们的作用:

ApiServer 启动的时候有下面 3 个核心参数:

openssl genrsa -out cs_client.key 2048
openssl req -new -key cs_client.key -sub "/CN=k8s-master" -out cs_client.csr
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out cs_client.crt

依然是自己的私钥,证书请求CSR,后面最终的证书需要借助上面的 CA 私钥 和 CA 根证书。

这边组件的双向证书都了,其它组件就不一一举例。

TLS 的整个认证还是比较复杂的,OpenSSL 帮我们封装了很多内置算法,即便这样这个过程下来流程还是比较多,需要我们抽丝剥茧慢慢了解。


联系我
置顶