准备TLS证书
MindIE MS当前业务定位是Kubernetes集群内组件,且仅集群管理员有使用权限,相关的TLS通信认证证书采用集群CA签发的证书。
证书分类
主要需要准备以下四套证书的CA证书、服务证书、私钥、KMC加密口令和KMC工作密钥。
- MindIE MS服务端证书
- MindIE MS服务端与kube API-Server通信的证书
- MindIE MS客户端msctl与MindIE MS服务端通信的证书
- MindIE MS服务端与MindIE Server通信的客户端证书
由于Kubernetes集群根CA证书(通常位于/etc/kubernetes/pki/ca.crt目录)不支持CRL吊销,为了保证MindIE MS相关组件在集群管理面的通信安全:
- 首先使用kubernetes集群根CA签发且具备CRL吊销能力(包含CRL Sign签名)的中间CA;中间CA的签发方法请参见签发中间CA。
- 使用该中间CA签发MindIE MS服务端证书、MindIE MS服务端与kube API-Server通信的客户端证书、MindIE MS客户端msctl与MindIE MS服务端通信证书;其签发方法请参见签发其他证书。
- MindIE MS服务端与MindIE Server通信的客户端证书,由业务面的CA签发,需要用户自行准备。
MindIE MS不支持证书有效期检查和更新机制,用户需要自行检测证书有效期,并对证书进行更新,避免业务中断。可参考CertTools章节,使用证书管理工具对证书进行有效期检查和更新。
签发中间CA
当前要求签发中间CA的subject name中CN=mindiems, O=msgroup;这是MindIE MS服务端唯一认可的中间CA名,且该中间CA由集群根CA签发,管理员确保只用于MindIE MS组件的证书签发。
签发中间CA对于路径没有要求,以下步骤以/home/{用户名称}/cas目录为例进行操作。
- 执行以下命令进入到/home/{用户名称}/cas目录。
cd /home/{用户名称}/cas
- 执行以下命令创建PKI私钥。
export CERT_CN=mindiems export CA_CERT=/etc/kubernetes/pki/ca.crt export CA_KEY=/etc/kubernetes/pki/ca.key mkdir "$CERT_CN" openssl genrsa -aes256 -out "$CERT_CN"/cert.key.pem 4096
参数解释:
- CERT_CN:MindIE MS服务端唯一认可的中间CA名,取值:mindiems;
- CA_CERT:Kubernetes集群根CA证书路径,取值:/etc/kubernetes/pki/ca.crt;
- CA_KEY:Kubernetes集群根CA私钥路径,取值:/etc/kubernetes/pki/ca.key。
根据回显输入私钥口令,然后按回车键。
Enter pass phrase for mindiems/cert.key.pem: Verifying - Enter pass phrase for mindiems/cert.key.pem:
出于安全考虑,以及后续导入证书的要求,用户输入的私钥口令的复杂度必须符合以下要求:
- 口令长度至少8个字符;
- 口令必须包含如下至少两种字符的组合:
- 至少一个小写字母;
- 至少一个大写字母;
- 至少一个数字;
- 至少一个特殊字符。
- 执行以下命令赋予cert.key.pem私钥文件可读权限。
chmod 400 "$CERT_CN"/cert.key.pem
执行以下命令检查"$CERT_CN"目录下是否存在cert.key.pem私钥文件,并查看私钥内容。openssl rsa -in "$CERT_CN"/cert.key.pem
根据回显输入2设置的私钥口令,然后按回车键,当显示私钥内容时表示cert.key.pem私钥文件生成成功。
- 执行以下命令创建CSR文件,根据回显输入2设置的私钥口令,然后按回车键。
openssl req -new -key "$CERT_CN"/cert.key.pem -out "$CERT_CN"/cert.csr -subj "/CN="$CERT_CN"/O=msgroup"
- 执行以下命令赋予cert.csr文件可读可写权限。
chmod 600 "$CERT_CN"/cert.csr
执行以下命令检查"$CERT_CN"目录下是否存在cert.csr文件,当显示cert.csr文件内容表示cert.csr文件生成成功。openssl req -in "$CERT_CN"/cert.csr -noout -text
- 执行以下命令创建证书拓展配置文件"$CERT_CN"/cert.conf。
vi "$CERT_CN"/cert.conf
并在cert.conf文件中添加如下内容:[ req ] distinguished_name = req_distinguished_name prompt = no [ v3_req ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign
- 执行以下命令签发证书(cert.pem),并赋予cert.pem文件可读权限。
openssl x509 -req -days 365 -sha256 -extensions v3_req -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial -in "$CERT_CN"/cert.csr -out "$CERT_CN"/cert.pem -extfile "$CERT_CN"/cert.conf chmod 400 "$CERT_CN"/cert.pem
执行以下命令检查“$CERT_CN”目录下是否存在cert.pem文件,当回显中有subject name: CN=mindiems, O=msgroup信息则证书签发成功。
openssl x509 -in "$CERT_CN"/cert.pem -noout -text
签发完成后,在/home/{用户名称}/cas目录下将生成一个/mindiems目录,/mindiems目录中包含的文件为:cert.conf、cert.csr、cert.key.pem和cert.pem。
签发其他证书
签发MindIE MS服务端证书、MindIE MS服务端与kube API-Server通信的客户端证书、MindIE MS客户端msctl与MindIE MS服务端通信证书对于路径没有要求,且签发方法相同。
以下步骤以/home/{用户名称}/cas目录为例签发MindIE MS服务端证书进行操作。
- 执行以下命令进入到/home/{用户名称}/cas目录。
cd /home/{用户名称}/cas
- 执行以下命令创建PKI私钥。
export CERT_CN=msserver export CA_CERT=/home/{用户名称}/cas/mindiems/cert.pem export CA_KEY=/home/{用户名称}/cas/mindiems/cert.key.pem mkdir "$CERT_CN" openssl genrsa -aes256 -out "$CERT_CN"/cert.key.pem 4096
参数解释:
- CERT_CN:证书类型由该参数决定,取值如下:
- MindIE MS服务端证书,取值为:msserver;
- MindIE MS服务端与kube API-Server通信的客户端证书,取值为:kubeclient;
- MindIE MS客户端msctl与MindIE MS服务端通信的证书,取值为:msclientuser。
- CA_CERT:签发中间CA的中间CA证书路径,取值:/home/{用户名称}/cas/mindiems/cert.pem;
- CA_KEY:签发中间CA的中间CA私钥路径,取值:/home/{用户名称}/cas/mindiems/cert.key.pem。
根据回显输入私钥口令,然后按回车键。
Enter pass phrase for msserver/cert.key.pem: Verifying - Enter pass phrase for msserver/cert.key.pem:
出于安全考虑,以及后续导入证书的要求,用户输入的私钥口令的复杂度必须符合以下要求:
- 口令长度至少8个字符;
- 口令必须包含如下至少两种字符的组合:
- 至少一个小写字母;
- 至少一个大写字母;
- 至少一个数字;
- 至少一个特殊字符。
- CERT_CN:证书类型由该参数决定,取值如下:
- 执行以下命令赋予私钥文件(cert.key.pem)可读权限。
chmod 400 "$CERT_CN"/cert.key.pem
执行以下命令检查"$CERT_CN"目录下是否存在私钥文件(cert.key.pem),并查看私钥内容。openssl rsa -in "$CERT_CN"/cert.key.pem
根据回显输入2设置的私钥口令,然后按回车键,当显示私钥内容时表示私钥文件(cert.key.pem)生成成功。
- 执行以下命令创建CSR文件,根据回显输入2设置的私钥口令,然后按回车键。
openssl req -new -key "$CERT_CN"/cert.key.pem -out "$CERT_CN"/cert.csr -subj "/CN="$CERT_CN"/O=msgroup"
- 执行以下命令赋予cert.csr文件可读可写权限。
chmod 600 "$CERT_CN"/cert.csr
执行以下命令检查"$CERT_CN"目录下是否存在cert.csr文件,当显示cert.csr文件内容表示cert.csr文件生成成功。openssl req -in "$CERT_CN"/cert.csr -noout -text
- 执行以下命令创建证书拓展配置文件"$CERT_CN"/cert.conf。
vi "$CERT_CN"/cert.conf
并在cert.conf文件中添加如下内容:[ req ] distinguished_name = req_distinguished_name prompt = no [ v3_req ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:false keyUsage = critical, digitalSignature, keyCertSign
- 执行以下命令签发MindIE MS服务端证书(cert.pem),并赋予cert.pem文件可读权限。
openssl x509 -req -days 365 -sha256 -extensions v3_req -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial -in "$CERT_CN"/cert.csr -out "$CERT_CN"/cert.pem -extfile "$CERT_CN"/cert.conf chmod 400 "$CERT_CN"/cert.pem
执行以下命令检查“$CERT_CN”目录下是否存在cert.pem文件,当回显中有subject name: CN=msserver, O=msgroup信息则证书签发成功。
openssl x509 -in "$CERT_CN"/cert.pem -noout -text
签发完成后,在/home/{用户名称}/cas目录下将生成一个/msserver目录,/msserver目录中包含的文件为:cert.conf、cert.csr、cert.key.pem和cert.pem。