你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 OPC UA 连接器配置 OPC UA 证书基础结构

重要

Azure Arc 启用的 Azure IoT 操作预览版目前处于预览状态。 不应在生产环境中使用此预览版软件。

在正式版推出后,你需要部署新的 Azure IoT 操作安装。 无法升级预览版安装。

有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

本文介绍如何为 OPC UA 连接器配置 OPC UA 证书基础结构。 通过此配置,可以确定信任安全地与哪些 OPC UA 服务器建立会话。

根据 OPC UA 规范,OPC UA 连接器在与 OPC UA 服务器建立安全通信时充当单个 OPC UA 应用程序。 OPC UA 连接器为其向 OPC UA 服务器开放的所有安全通道使用相同的应用程序实例证书。

要了解详细信息,请参阅为 OPC UA 连接器配置 OPC UA 证书基础结构

先决条件

配置自签名应用程序实例证书

OPC UA 连接器的默认部署会安装证书管理器所需的所有资源,以创建符合 OPC UA 的自签名证书。 此证书存储在 aio-opc-opcuabroker-default-application-cert 机密中。 此机密将映射到所有 OPC UA 连接器 Pod,并充当 OPC UA 客户端应用程序实例证书。 cert-manager 处理此应用程序实例证书的自动续订。

此配置通常足以在演示或探索环境中实现 OPC UA 服务器和 OPC UA 连接器之间的合规和安全通信。 对于生产环境,请在部署中使用企业级应用程序实例证书。

配置受信任的证书列表

若要连接到资产,首先需要建立应用程序身份验证相互信任。 对于 OPC UA 连接器,请完成以下步骤:

  1. 获取 OPC UA 服务器应用程序的实例证书作为文件。 这些文件的扩展名通常为 .der 或 .crt。 这只是公钥。

    提示

    通常,OPC UA 服务器具有一个接口,可用于导出其应用程序实例证书。 此接口不标准化。 对于 KEPServerEx 等服务器,有一个基于 Windows 的配置 UI 用于证书管理。 其他服务器可能具有 Web 界面或使用操作系统文件夹来存储证书。 请参阅服务器的用户手册,了解如何导出应用程序实例证书。 获得证书后,请确保它是 DER 或 PEM 编码的。 通常存储在扩展名为 .der 或 .crt 的文件中。 如果证书不是其中一种文件格式,请使用 openssl 等工具将证书转换为所需的格式。

  2. 将 OPC UA 服务器的应用程序实例证书添加到受信任的证书列表中。 此列表作为 Kubernetes 本机机密实现,该机密名为 aio-opc-ua-broker-trust-list,是在部署 Azure IoT 操作时创建的。

    对于 ./my-server.der 等文件中的 DER 编码证书,请运行以下命令:

    # Append my-server.der OPC UA server certificate to the trusted certificate list secret as a new entry
    az iot ops connector opcua trust add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server.der"
    

    对于 ./my-server.crt 等文件中的 PEM 编码证书,请运行以下命令:

    # Append my-server.crt OPC UA server certificate to the trusted certificate list secret as a new entry
    az iot ops connector opcua trust add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server.crt"
    

如果 OPC UA 服务器使用证书颁发机构 (CA) 颁发的证书,则可以通过将其公钥证书添加到 OPC UA 连接器受信任证书列表来信任 CA。 现在,OPC UA 连接器会自动信任使用 CA 颁发的有效证书的所有服务器。 因此,无需将 OPC UA 服务器的证书显式添加到 OPC UA 连接器的受信任证书列表中。

若要信任 CA,请完成以下步骤:

  1. 获取以 DER 或 PEM 格式编码的 CA 证书公钥。 这些证书通常存储在扩展名为 .der 或 .crt 的文件中。 获取 CA 的 CRL。 此列表通常位于一个扩展名为 .crl 的文件中。 有关详细信息,请查看 OPC UA 服务器的文档。

  2. 将 CA 证书和 CRL 保存在 aio-opc-ua-broker-trust-list Kubernetes 本机机密中。

    对于 ./my-server-ca.der 等文件中的 DER 编码证书,请运行以下命令:

    # Append CA certificate to the trusted certificate list secret as a new entry
    az iot ops connector opcua trust add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.der"
    
    # Append the CRL to the trusted certificate list secret as a new entry
    data=$(kubectl create secret generic temp --from-file= my-server-ca.crl=./ my-server-ca.crl --dry-run=client -o jsonpath='{.data}')
    kubectl patch secret aio-opc-ua-broker-trust-list -n azure-iot-operations -p "{`"data`": $data}"
    

    对于 ./my-server-ca.crt 等文件中的 PEM 编码证书,请运行以下命令:

    # Append CA certificate to the trusted certificate list secret as a new entry
    az iot ops connector opcua trust add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.crt"
    
    # Append the CRL to the trusted certificates list secret as a new entry
    data=$(kubectl create secret generic temp --from-file=my-server-ca.crl=./my-server-ca.crl --dry-run=client -o jsonpath='{.data}')
    kubectl patch secret aio-opc-ua-broker-trust-list -n azure-iot-operations -p "{`"data`": $data}"
    

配置颁发者证书列表

如果 OPC UA 服务器使用证书颁发机构 (CA) 颁发的证书,但你不想信任该 CA 颁发的所有证书,请完成以下步骤:

  1. 按照上一部分中的前三个步骤信任 OPC UA 服务器的应用程序实例证书。

  2. 除了证书本身,OPC UA 连接器还需要 CA 证书来正确验证 OPC UA 服务器的证书的颁发者链。 将 CA 证书及其证书吊销列表 (CRL) 添加到名为 aio-opc-ua-broker-issuer-list (作为 Kubernetes 机密实现) 的单独列表。

    1. 将 CA 证书和 CRL 保存在 aio-opc-ua-broker-issuer-list 机密中。

      # Append CA certificate to the issuer list secret as a new entry
      az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.der"
      
      # Append the CRL to the issuer list secret as a new entry
      az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.crl"
      

      对于 ./my-server-ca.crt 等文件中的 PEM 编码证书,请运行以下命令:

      # Append CA certificate to the issuer list secret as a new entry
      az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.crt"
      
      # Append the CRL to the issuer list secret as a new entry
      az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./my-server-ca.crl"
      

配置 OPC UA 服务器

若要完成应用程序身份验证相互信任的配置,需要将 OPC UA 服务器配置为信任 OPC UA 连接器的应用程序实例证书:

  1. 若要将 OPC UA 连接器证书提取到 opcuabroker.crt 文件中,请运行以下命令:

    kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
    
  2. 许多 OPC UA 服务器仅支持 DER 格式的证书。 如有必要,请使用以下命令将 opcuabroker.crt 证书转换为 opcuabroker.der

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. 请参阅 OPC UA 服务器的文档,了解如何将 opcuabroker.crtopcuabroker.der 证书文件添加到服务器的受信任证书列表中。

配置企业级应用程序实例证书

对于生产环境,可以将 OPC UA 连接器配置为使用企业级应用程序实例证书。 通常,企业证书颁发机构 (CA) 会颁发此证书,并且你在配置时需要使用此 CA 证书。 通常,CA 有一个层次结构,需要将 CA 的完整验证链添加到配置中。

以下示例引用以下项:

说明
opcuabroker-certificate.der 包含企业级应用程序实例证书公钥的文件。
opcuabroker-certificate.pem 包含企业级应用程序实例证书私钥的文件。
subjectName 嵌入在应用程序实例证书中的使用者名称字符串。
applicationUri 嵌入在应用程序实例中的应用程序实例 URI。
enterprise-grade-ca-1.der 包含企业级 CA 证书公钥的文件。
enterprise-grade-ca-1.crl CA 的 CRL 文件。

与前面的示例一样,你需要使用专用的 Kubernetes 机密来存储证书和 CRL。 若要配置企业级应用程序实例证书,请完成以下步骤:

  1. 使用以下命令将证书和 CRL 保存在 aio-opc-ua-broker-client-certificate 机密中:

    # Create aio-opc-ua-broker-client-certificate secret
    # Upload OPC UA public key certificate as an entry to the secret
    # Upload OPC UA private key certificate as an entry to the secret
    az iot ops connector opcua client add \
        --instance $INSTANCE_NAME \
        -g $RESOURCE_GROUP \
        --public-key-file "./opcuabroker-certificate.der" \
        --private-key-file "./opcuabroker-certificate.pem" \
        --subject-name <subject name from the public key cert> \
        --application-uri <application uri from the public key cert>
    
  2. 如果使用 CA 颁发 OPC UA 代理的证书,请配置 aio-opc-ua-broker-issuer-list 机密。 使用 Kubernetes 客户端 (例如 kubectl) 配置机密 enterprise-grade-ca-1.derenterprise-grade-ca-1.crl

    # Append CA certificate to the issuer list secret as a new entry
    az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./enterprise-grade-ca-1.der"
    
    # Append the CRL to the issuer list secret as a new entry
    az iot ops connector opcua issuer add --instance $INSTANCE_NAME --resource-group $RESOURCE_GROUP --certificate-file "./enterprise-grade-ca-1.crl"
    

现在,OPC UA 连接器使用企业证书,不要忘记将新证书的公钥添加到它需要连接到的所有 OPC UA 服务器的受信任证书列表中。