开启Client端TLS认证

  • 如果关闭TLS认证,会存在较高的网络安全风险。
  • TLS认证是节点内的Client和Server通信,不涉及跨节点通信,Client端和Server端必须同步开启或关闭TLS认证,否则Client端和Server端会连接失败。
  • 多用户访问MindIO ACP服务时,每个用户使用的证书可以不同,但是需要由同一个CA签发。
  • MindSpore不涉及TLS认证,默认不开启。

前提条件

MindIO ACP已经安装成功。

TLS证书准备

证书安全要求:

  • 需使用业界公认安全可信的非对称加密算法、密钥长度、Hash算法、证书格式等。
  • 应处于有效期内。

MindIO ACP不提供数字证书、CA证书、密钥、吊销证书列表文件,需自行准备表1所列文件。

表1 Client端使用TLS认证所需文件列表

文件

说明

CA文件

证书颁发机构(CA)签发的证书,用于验证服务器证书和客户端证书的可信度。CA证书是信任链的基础,可以是根证书或中间证书。格式为:PEM(*.pem)。需要与Server端的CA文件相同。

Client端的证书

由CA签发的证书,保证在有效期内。它用于在TLS连接中验证服务器的身份,并加密传输的数据。服务端会使用CA证书来验证客户端证书的真实性。格式为:PEM chain(*.pem)。

Client端的证书对应的私钥文件

要与Client端证书对应。私钥用于解密服务端发送的加密数据,并用于在TLS握手过程中证明服务端的身份。该文件必须严格保密,不能泄露给任何第三方。安装者要知道这个私钥文件的口令。格式为:PEM encrypted(*.pem)。

seceasy_encrypt文件

安全加密工具。可参见表1

吊销证书列表文件

包含由CA发布的已被吊销的证书列表。服务器和客户端可以使用CRL来检查某个证书是否已被吊销,从而决定是否信任该证书。CRL用于维护证书的有效性和安全性,防止使用已吊销的证书进行通信。扩展名为*.pem。如无吊销证书,则可以不准备。

操作步骤

  1. 准备加密仓目录。

    同一个用户可以使用多个不同的证书。一个用户首次准备Client证书时,需要进行此步操作,之后再次为此用户准备证书时,不需要再次准备加密仓目录。

    1. 每个用户需要一个私有的加密仓目录,可以在用户的主目录下创建一个新目录作为加密仓,为了安全,将新创建的目录权限设置为0700,禁止其它用户访问。
      mkdir ~/crypt_repo
      chmod 0700 ~/crypt_repo
    2. 将seceasy_encrypt文件复制到创建的加密仓目录,确保seceasy_encrypt文件有执行权限,将权限设置为0500。
      cp {安装包解压路径}/seceasy_encrypt ~/crypt_repo/
      chmod 0500 ~/crypt_repo/seceasy_encrypt

  2. 生成加密口令文件。

    为了防止Client端私钥的口令泄露,对口令进行加密后保存在文件中用于给Client进程使用。

    1. 进入加密仓目录,执行命令。
      cd ~/crypt_repo/
      ./seceasy_encrypt --encrypt 1 2
    2. 输入私钥口令。
      please input the password to encrypt {私钥口令}
      please input the password to encrypt again {私钥口令}
      encrypted: {Base64-Encoded-Data}

      连续两次输出相同的私钥口令后,工具输出Base64编码后的数据。

      密码建议具有健壮性并保密,建议不要使用弱口令,关于口令复杂度,请参见口令复杂度要求章节。

    3. 保存加密后的口令文件。

      复制上一步输出的Base64编码数据,保存到一个新文件中作为口令文件。

      echo "{Base64-Encoded-Data}" > password.txt

  3. 调用初始化接口。

    修改框架代码,在使用MindIO ACP服务之前初始化。

    torch_mindio.initialize(tls_open=True,                                          # 此参数设置为True,表示启动TLS认证
                            cert_path='/home/certs/client.pem',                     # 此参数设置为Client证书的路径
                            ca_path='/home/certs/ca.cert',                          # 此参数设置为CA的路径
                            pri_key_path='/home/keys/client_key.pem',               # 此参数设置为私钥的路径
                            key_pass_path='{user.homedir}/crypt_repo/password.txt', # 此参数设置为加密仓目录中的口令文件
                            pmt_path='{user.homedir}/crypt_repo/tools/pmt',         # 此参数设置为加密仓目录中的tools/pmt路径
                            crl_path='/home/certs/crl.crl'                          # 此参数设置为吊销证书路径,可选
                            ) 

  4. 设置环境变量。

    Client端要使用TLS功能,需要依赖一个环境变量,在启动Client进程的时候,需要提前设置环境变量,例如:

    export HSECEASY_PATH={Python安装目录}/lib/python3.7/site-packages/torch_mindio

    路径请修改为torch_mindio实际安装路径。