Compartir a través de


Configurar la infraestructura de certificados de OPC UA para la versión preliminar de OPC UA Broker de Azure IoT

Importante

Operaciones de IoT de Azure, habilitado por Azure Arc, está actualmente en VERSIÓN PRELIMINAR. No se debería usar este software en versión preliminar en entornos de producción.

Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

En este artículo, obtendrá información sobre cómo configurar la infraestructura de certificados de OPC UA para OPC UA Broker de Azure IoT. Esta configuración le permite determinar en qué servidores OPC UA confía para establecer una sesión de manera segura.

De acuerdo con la especificación de OPC UA, OPC UA Broker actúa como una sola aplicación de OPC UA cuando establece comunicaciones seguras con los servidores OPC UA. OPC UA Broker de Azure IoT usa el mismo certificado de instancia de aplicación para todos los canales seguros que abre en los servidores OPC UA.

Para obtener más información, consulte Infraestructura de los certificados de OPC UA para la versión preliminar de OPC UA Broker de Azure IoT.

Requisitos previos

Una instancia implementada de la versión preliminar de Operaciones de IoT de Azure. Para implementar Operaciones de IoT de Azure con fines de demostración y exploración, consulte Inicio rápido: implementación de Operaciones de IoT de Azure en un clúster de Kubernetes habilitado para Arc.

Configuración de un certificado de instancia de aplicación autofirmado

La implementación predeterminada de OPC UA Broker instala todos los recursos que necesita el administrador de certificados para crear un certificado autofirmado compatible con OPC UA. Este certificado se almacena en el secreto aio-opc-opcuabroker-default-application-cert. Este secreto se asigna a todos los pods del conector de OPC UA y actúa como el certificado de instancia de aplicación cliente de OPC UA. cert-manager controla la renovación automática de este certificado de instancia de aplicación.

Esta configuración suele ser suficiente para una comunicación compatible y segura entre los servidores de OPC UA y OPC UA Broker en un entorno de demostración o exploración. Para un entorno de producción, use certificados de instancia de aplicación de nivel empresarial en la implementación.

Configuración de la lista de certificados de confianza

Para conectarse a un recurso, primero debe establecer la confianza mutua de autenticación de la aplicación. Para OPC UA Broker, complete los pasos siguientes:

  1. Obtenga el certificado de instancia de la aplicación de servidor OPC UA como un archivo. Estos archivos suelen tener una extensión .der o .crt. Esta solo es la clave pública.

    Sugerencia

    Normalmente, un servidor OPC UA tiene una interfaz que le permite exportar su certificado de instancia de aplicación. Esta interfaz no está estandarizada. Para servidores como KEPServerEx, hay una interfaz de usuario de configuración basada en Windows para la administración de certificados. Otros servidores pueden tener una interfaz web o usar carpetas del sistema operativo para almacenar los certificados. Consulte el manual de usuario del servidor para averiguar cómo exportar el certificado de instancia de aplicación. Una vez que tenga el certificado, asegúrese de que esté codificado en DER o PEM. Normalmente se almacena en archivos con la extensión .der o .crt. Si el certificado no está en uno de esos formatos de archivo, use una herramienta como openssl para transformar el certificado en el formato necesario.

  2. Guarde el certificado de instancia de aplicación del servidor OPC UA en Azure Key Vault como un secreto.

    Para un certificado codificado en DER en un archivo como ./my-server.der, ejecute el siguiente comando:

    # Upload my-server.der OPC UA Server's certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-der" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server.der \
      --encoding hex \
      --content-type application/pkix-cert
    

    Para un certificado codificado en PEM en un archivo como ./my-server.crt, ejecute el siguiente comando:

    # Upload my-server.crt OPC UA Server's certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crt" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
  3. Configure el recurso personalizado aio-opc-ua-broker-trust-list en el clúster. Use un cliente de Kubernetes como kubectl para configurar los secretos, como my-server-der o my-server-crt, en la matriz de objetos SecretProviderClass del clúster.

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en DER:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-der
              objectType: secret
              objectAlias: my-server.der
              objectEncoding: hex
    

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en PEM con la extensión .crt:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-crt
              objectType: secret
              objectAlias: my-server.crt
              objectEncoding: hex
    

    Nota:

    El tiempo necesario para proyectar certificados de Azure Key Vault en el clúster depende del intervalo de sondeo configurado.

Si el servidor OPC UA usa un certificado emitido por una entidad de certificación (CA), puede confiar en la entidad de certificación si agrega su certificado de clave pública a la lista de certificados de confianza de OPC UA Broker. La instancia de OPC UA Broker ahora confía automáticamente en todos los servidores que usan un certificado válido emitido por la entidad de certificación. Por lo tanto, no es necesario agregar explícitamente el certificado del servidor OPC UA a la lista de certificados de confianza de OPC UA Broker.

Para confiar en una entidad de certificación, complete los pasos siguientes:

  1. Obtenga la clave pública del certificado de entidad de certificación codificada en formato DER o PEM. Estos certificados se almacenan normalmente en archivos con la extensión .der o .crt. Obtenga la lista de revocación de certificados (CRL) de la entidad de certificación. Esta lista suele estar en un archivo con la extensión .crl. Consulte la documentación del servidor OPC UA para obtener más información.

  2. Guarde el certificado de entidad de certificación y la CRL en Azure Key Vault como secretos.

    Para un certificado codificado en DER en un archivo como ./my-server-ca.der, ejecute los siguientes comandos:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-der" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.der \
      --encoding hex \
      --content-type application/pkix-cert
    
    # Upload the CRL as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crl" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    

    Para un certificado codificado en PEM en un archivo como ./my-server-ca.crt, ejecute los comandos siguientes:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
    # Upload the CRL as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crl" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Configure el recurso personalizado aio-opc-ua-broker-trust-list en el clúster. Use un cliente de Kubernetes como kubectl para configurar los secretos, como my-server-ca-der o my-server-ca-crt, en la matriz de objetos SecretProviderClass del clúster.

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en DER:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-der
              objectType: secret
              objectAlias: my-server-ca.der
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en PEM con la extensión .crt:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-crt
              objectType: secret
              objectAlias: my-server-ca.crt
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    Nota:

    El tiempo necesario para proyectar certificados de Azure Key Vault en el clúster depende del intervalo de sondeo configurado.

Configuración de la lista de certificados del emisor

Si el servidor OPC UA usa un certificado emitido por una entidad de certificación (CA), pero no desea confiar en todos los certificados emitidos por la CA, complete los pasos siguientes:

  1. Confíe en el certificado de instancia de aplicación del servidor OPC UA siguiendo los tres primeros pasos de la sección anterior.

  2. Además del propio certificado, OPC UA Broker necesita el certificado de entidad de certificación para validar correctamente la cadena del emisor del certificado del servidor OPC UA. Agregue el certificado de entidad de certificación y su lista de revocación de certificados (CRL) a una lista independiente denominada aio-opc-ua-broker-issuer-list.

    1. Guarde el certificado de entidad de certificación y la CRL en Azure Key Vault como secretos.

      Para un certificado codificado en DER en un archivo como ./my-server-ca.der, ejecute los siguientes comandos:

      # Upload CA certificate as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-ca-der" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.der \
        --encoding hex \
        --content-type application/pkix-cert
      
      # Upload the CRL as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-crl" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crl \
        --encoding hex \
        --content-type application/pkix-crl
      

      Para un certificado codificado en PEM en un archivo como ./my-server-ca.crt, ejecute los comandos siguientes:

      # Upload CA certificate as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-ca-crt" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crt \
        --encoding hex \
        --content-type application/x-pem-file
      
      # Upload the CRL as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-crl" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crl \
        --encoding hex \
        --content-type application/pkix-crl
      
  3. Configure el recurso personalizado aio-opc-ua-broker-issuer-list en el clúster. Use un cliente de Kubernetes como kubectl para configurar los secretos, como my-server-ca-der o my-server-ca-crt, en la matriz de objetos SecretProviderClass del clúster.

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en DER:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-der
              objectType: secret
              objectAlias: my-server-ca.der
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo que contiene el certificado de servidor OPC UA de confianza en un archivo codificado en PEM con la extensión .crt:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-crt
              objectType: secret
              objectAlias: my-server-ca.crt
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    Nota:

    El tiempo necesario para proyectar certificados de Azure Key Vault en el clúster depende del intervalo de sondeo configurado.

Configuración del servidor OPC UA

Para completar la configuración de la confianza mutua de autenticación de la aplicación, debe configurar el servidor OPC UA para que confíe en el certificado de instancia de aplicación de OPC UA Broker:

  1. Para extraer el certificado de OPC UA Broker en un archivo opcuabroker.crt, ejecute el siguiente comando:

    kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
    

    En PowerShell, puede completar la misma tarea con el siguiente comando:

    kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcuabroker.crt
    
  2. Muchos servidores OPC UA solo admiten certificados en formato DER. Si es necesario, use el siguiente comando para convertir el certificado opcuabroker.crt en opcuabroker.der:

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Consulte la documentación del servidor OPC UA para obtener información sobre cómo agregar el archivo de certificado opcuabroker.crt o opcuabroker.der a la lista de certificados de confianza del servidor.

Configuración de un certificado de instancia de aplicación de nivel empresarial

En entornos de producción, puede configurar OPC UA Broker para que use un certificado de instancia de aplicación de nivel empresarial. Normalmente, una entidad de certificación (CA) empresarial emite este certificado y usted necesita el certificado de entidad de certificación en la configuración. A menudo, hay una jerarquía de entidades de certificación y debe agregar la cadena de validación completa de CA a la configuración.

En el ejemplo siguiente se hace referencia a los siguientes elementos:

Elemento Descripción
opcuabroker-certificate.der Archivo que contiene la clave pública del certificado de instancia de aplicación de nivel empresarial.
opcuabroker-certificate.pem Archivo que contiene la clave privada del certificado de instancia de aplicación de nivel empresarial.
subjectName Cadena de nombre del firmante insertada en el certificado de instancia de aplicación.
applicationUri URI de la instancia de aplicación insertada en la instancia de aplicación.
enterprise-grade-ca-1.der Archivo que contiene la clave pública del certificado de entidad de certificación de nivel empresarial.
enterprise-grade-ca-1.crl Archivo de lista de revocación de certificados (CRL) de la entidad de certificación

Al igual que en los ejemplos anteriores, se usa Azure Key Vault para almacenar los certificados y las CRL. Después, configure los recursos personalizados SecretProviderClass en el clúster conectado para proyectar los certificados y las CRL en los pods de OPC UA Broker. Para configurar el certificado de instancia de aplicación de nivel empresarial, complete los pasos siguientes:

  1. Guarde los certificados y la CRL en Azure Key Vault como secretos mediante los siguientes comandos:

     # Upload OPC UA Broker public key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "opcuabroker-certificate-der" \
       --vault-name <your-azure-key-vault-name> \
       --file ./opcuabroker-certificate.der \
       --encoding hex \
       --content-type application/pkix-cert
    
     # Upload OPC UA Broker private key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "opcuabroker-certificate-pem" \
       --vault-name <your-azure-key-vault-name> \
       --file ./opcuabroker-certificate.pem \
       --encoding hex \
       --content-type application/x-pem-file
    
     # Upload CA public key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "enterprise-grade-ca-1-der" \
       --vault-name <your-azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.der \
       --encoding hex \
       --content-type application/pkix-cert
    
     # Upload CA certificate revocation list as secret to Azure Key Vault
     az keyvault secret set \
       --name "enterprise-grade-ca-1-crl" \
       --vault-name <your-azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.crl \
       --encoding hex \
       --content-type application/pkix-crl
    
  2. Configure el recurso personalizado aio-opc-ua-broker-client-certificate en el clúster. Use un cliente de Kubernetes como kubectl para configurar los secretos opcuabroker-certificate-der y opcuabroker-certificate-pem en la matriz de objetos SecretProviderClass del clúster.

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo después de agregar las configuraciones secretas:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-client-certificate
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: opcuabroker-certificate-der
              objectType: secret
              objectAlias: opcuabroker-certificate.der
              objectEncoding: hex
            - |
              objectName: opcuabroker-certificate-pem
              objectType: secret
              objectAlias: opcuabroker-certificate.pem
              objectEncoding: hex
    
  3. Si usa la entidad de certificación para emitir certificados para los servidores OPC UA, configure el recurso personalizado aio-opc-ua-broker-issuer-list en el clúster. Use un cliente de Kubernetes como kubectl para configurar los secretos enterprise-grade-ca-1-der y enterprise-grade-ca-1-crl en la matriz de objetos SecretProviderClass del clúster.

    En el ejemplo siguiente se muestra un recurso personalizado SecretProviderClass completo después de agregar las configuraciones secretas:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: enterprise-grade-ca-1-der
              objectType: secret
              objectAlias: enterprise-grade-ca-1.der
              objectEncoding: hex
            - |
              objectName: enterprise-grade-ca-1-crl
              objectType: secret
              objectAlias: enterprise-grade-ca-1.crl
              objectEncoding: hex
    
  4. Actualice la implementación de OPC UA Broker para usar el nuevo origen de SecretProviderClass para los certificados de instancia de aplicación mediante el siguiente comando:

    az k8s-extension update \
        --version 0.3.0-preview \
        --name opc-ua-broker \
        --release-train preview \
        --cluster-name <cluster-name> \
        --resource-group <azure-resource-group> \
        --cluster-type connectedClusters \
        --auto-upgrade-minor-version false \
        --config securityPki.applicationCert=aio-opc-ua-broker-client-certificate \
        --config securityPki.subjectName=<subjectName> \
        --config securityPki.applicationUri=<applicationUri>
    

Ahora que OPC UA Broker usa el certificado empresarial, no olvide agregar la clave pública del nuevo certificado en las listas de certificados de confianza de todos los servidores OPC UA a los que necesita conectarse.