下载
中文
注册

准备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相关组件在集群管理面的通信安全:

  1. 首先使用kubernetes集群根CA签发且具备CRL吊销能力(包含CRL Sign签名)的中间CA;中间CA的签发方法请参见签发中间CA
  2. 使用该中间CA签发MindIE MS服务端证书、MindIE MS服务端与kube API-Server通信的客户端证书、MindIE MS客户端msctl与MindIE MS服务端通信证书;其签发方法请参见签发其他证书
  3. 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目录为例进行操作。

  1. 执行以下命令进入到/home/{用户名称}/cas目录。
    cd /home/{用户名称}/cas
  2. 执行以下命令创建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个字符;
    • 口令必须包含如下至少两种字符的组合:
      • 至少一个小写字母;
      • 至少一个大写字母;
      • 至少一个数字;
      • 至少一个特殊字符。
  3. 执行以下命令赋予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私钥文件生成成功。

  4. 执行以下命令创建CSR文件,根据回显输入2设置的私钥口令,然后按回车键。
    openssl req -new -key  "$CERT_CN"/cert.key.pem -out "$CERT_CN"/cert.csr -subj "/CN="$CERT_CN"/O=msgroup"
  5. 执行以下命令赋予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
  6. 执行以下命令创建证书拓展配置文件"$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
  7. 执行以下命令签发证书(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服务端证书进行操作。

  1. 执行以下命令进入到/home/{用户名称}/cas目录。
    cd /home/{用户名称}/cas
  2. 执行以下命令创建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个字符;
    • 口令必须包含如下至少两种字符的组合:
      • 至少一个小写字母;
      • 至少一个大写字母;
      • 至少一个数字;
      • 至少一个特殊字符。
  3. 执行以下命令赋予私钥文件(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)生成成功。

  4. 执行以下命令创建CSR文件,根据回显输入2设置的私钥口令,然后按回车键。
    openssl req -new -key  "$CERT_CN"/cert.key.pem -out "$CERT_CN"/cert.csr -subj "/CN="$CERT_CN"/O=msgroup"
  5. 执行以下命令赋予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
  6. 执行以下命令创建证书拓展配置文件"$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
  7. 执行以下命令签发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。