Konfigurowanie infrastruktury certyfikatów OPC UA dla usługi Azure IoT OPC UA Broker (wersja zapoznawcza)

Ważne

Usługa Azure IoT Operations Preview — włączona przez usługę Azure Arc jest obecnie dostępna w wersji zapoznawczej. Nie należy używać tego oprogramowania w wersji zapoznawczej w środowiskach produkcyjnych.

Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

Z tego artykułu dowiesz się, jak skonfigurować infrastrukturę certyfikatów OPC UA dla brokera usługi Azure IoT OPC UA. Ta infrastruktura zapewnia kontrolę nad tym, które serwery OPC UA w terenie są zaufane, aby bezpiecznie ustanowić sesję i zbierać dane telemetryczne dla rozwiązania. Zgodnie ze specyfikacją OPC UA broker OPC UA działa jako pojedyncza aplikacja UA, gdy ustanawia bezpieczną komunikację z serwerami OPC UA. Broker usługi Azure IoT OPC UA używa tego samego certyfikatu wystąpienia aplikacji dla wszystkich bezpiecznych kanałów między samymi serwerami OPC UA, z którymi się łączy.

Wymagania wstępne

Zainstalowano program Azure IoT Operations Preview. Aby uzyskać więcej informacji, zobacz Szybki start: wdrażanie operacji usługi Azure IoT — w klastrze Kubernetes z obsługą usługi Arc.

Obsługiwane funkcje

W poniższej tabeli przedstawiono poziom obsługi funkcji uwierzytelniania w bieżącej wersji brokera OPC UA:

Funkcje Znaczenie Symbol
Konfiguracja certyfikatu wystąpienia aplikacji z podpisem własnym OPC UA Obsługiwane
Obsługa listy zaufanych certyfikatów OPC UA Obsługiwane
Obsługa list certyfikatów wystawcy OPC UA Obsługiwane
Konfiguracja certyfikatu wystąpienia aplikacji klasy korporacyjnej OPC UA Obsługiwane
Obsługa niezaufanych certyfikatów OPC UA Nieobsługiwane
Obsługa globalnej usługi odnajdywania OPC UA (GDS) Nieobsługiwane

Konfiguracja certyfikatu wystąpienia aplikacji OPC UA z podpisem własnym

Domyślne wdrożenie brokera OPC UA instaluje wszystkie zasoby wymagane przez menedżera certyfikatów Kubernetes w celu utworzenia certyfikatu OPC UA zgodnego z podpisem własnym. Ten certyfikat jest przechowywany w kluczu tajnym aio-opc-opcuabroker-default-application-cert kubernetes. Ten wpis tajny jest mapowany na wszystkie zasobniki kubernetes łącznika OPC UA i działa jako certyfikat wystąpienia aplikacji klienckiej OPC UA. Odnawianie certyfikatu wystąpienia aplikacji odbywa się automatycznie przez menedżera certyfikatów Kubernetes.

Ta konfiguracja jest zazwyczaj wystarczająco dobra, aby zapewnić zgodną i bezpieczną komunikację między zasobem obsługującym protokół OPC UA i brokerem OPC UA na potrzeby demonstracyjne i testowe. W celach produkcyjnych należy używać certyfikatów wystąpień aplikacji klasy korporacyjnej we wdrożeniu.

Jak obsługiwać listę zaufanych certyfikatów OPC UA

Aby nawiązać połączenie z zasobem, najpierw należy ustanowić wzajemne zaufanie uwierzytelniania aplikacji. W przypadku brokera OPC UA wykonaj następujące czynności:

  1. Pobierz certyfikat wystąpienia aplikacji serwera OPC UA (tylko klucz publiczny) w *.der formacie pliku lub *.crt .

    Zazwyczaj serwery OPC UA mają interfejs umożliwiający eksportowanie certyfikatu wystąpienia aplikacji. Ten interfejs nie jest ustandaryzowany. W przypadku serwerów, takich jak PTC KepWareEx, interfejs użytkownika konfiguracji opartej na systemie Windows jest dostępny do zarządzania certyfikatami. Niektóre inne serwery mają interfejs internetowy, podczas gdy inne używają niektórych folderów w systemie operacyjnym do przechowywania certyfikatów. Zapoznaj się z podręcznikiem użytkownika serwera, aby dowiedzieć się, jak wyeksportować certyfikat wystąpienia aplikacji. Po utworzeniu certyfikatu jako pliku upewnij się, że jest on w formacie *.der lub *.crt (PEM). Jeśli certyfikat nie jest w jednym z tych formatów, użyj narzędzi takich jak openssl, aby przekształcić certyfikat w wymagany format pliku *.der lub *.crt.

  2. Wypchnij certyfikat wystąpienia aplikacji serwera OPC UA w usłudze Azure Key Vault jako wpis tajny.

    W przypadku *.der pliku w formacie pliku ./my-server.der uruchom następujące polecenie:

    # 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 <azure-key-vault-name> \
      --file ./my-server.der \
      --encoding hex \
      --content-type application/pkix-cert
    

    W przypadku *.crt pliku certyfikatu formatu pliku (PEM) ./my-server.crt uruchom następujące polecenie:

    # Upload my-server.der OPC UA Server's certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crt" \
      --vault-name <azure-key-vault-name> \
      --file ./my-server.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
  3. Skonfiguruj zasób niestandardowy klasy dostawcy wpisów tajnych (SPC) aio-opc-ua-broker-trust-list w połączonym klastrze. Użyj klienta K8s, takiego jak kubectl, aby skonfigurować wpisy tajne (my-server-der lub my-server-crt w poniższym przykładzie) w tablicy obiektów SPC w połączonym klastrze.

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.der konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-der
              objectType: secret
              objectAlias: my-server.der
              objectEncoding: hex
    

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.crt konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-crt
              objectType: secret
              objectAlias: my-server.crt
              objectEncoding: hex
    

    Projekcja wpisów tajnych i certyfikatów usługi Azure Key Vault w klastrze trwa trochę czasu w zależności od skonfigurowanego interwału sondowania.

Jeśli serwer OPC UA używa certyfikatu wystawionego przez urząd certyfikacji, możesz zaufać urzędowi certyfikacji, dodając certyfikat klucza publicznego do listy zaufanych certyfikatów brokera OPC UA. Dzięki temu wystąpienie brokera OPC UA automatycznie ufa wszystkim serwerom korzystającym z prawidłowego certyfikatu wystawionego przez urząd certyfikacji. W takim przypadku nie musisz jawnie dodawać certyfikatu serwera OPC UA do listy zaufanych certyfikatów brokera OPC UA.

Aby ufać urzędowi certyfikacji, wykonaj następujące kroki konfiguracji:

  1. Pobierz klucz publiczny certyfikatu urzędu certyfikacji w *.der formacie pliku lub *.crt . Pobierz listę odwołania certyfikatów urzędu certyfikacji (CRL) w *.crl formacie pliku. Zapoznaj się z dokumentacją serwera OPC UA, aby znaleźć szczegółowe informacje.

  2. Wypchnij certyfikat urzędu certyfikacji i listę CRL w usłudze Azure Key Vault jako wpisy tajne.

    W przypadku *.der pliku w formacie pliku ./my-server-ca.der uruchom następujące polecenie:

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

    W przypadku *.crt pliku certyfikatu formatu pliku (PEM) ./my-server-ca.crt uruchom następujące polecenie:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <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 <azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Skonfiguruj zasób niestandardowy klasy dostawcy wpisów tajnych (SPC) aio-opc-ua-broker-trust-list w połączonym klastrze. Użyj klienta K8s, takiego jak kubectl, aby skonfigurować wpisy tajne (my-server-ca-der lub my-server-ca-crt w poniższym przykładzie) w tablicy obiektów SPC w połączonym klastrze.

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.der konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <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
    

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.crt konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <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
    

    Projekcja wpisów tajnych i certyfikatów usługi Azure Key Vault w klastrze trwa trochę czasu w zależności od skonfigurowanego interwału sondowania.

Jak obsługiwać listę certyfikatów wystawców OPC UA

Jeśli serwer OPC UA używa certyfikatu wystawionego przez urząd certyfikacji, ale nie chcesz ufać urzędowi certyfikacji, wykonaj następujące kroki:

  1. Ufaj certyfikatowi wystąpienia aplikacji serwera OPC UA, wykonując pierwsze trzy kroki opisane w poprzedniej sekcji.

  2. Oprócz samego certyfikatu broker OPC UA wymaga certyfikatu urzędu certyfikacji, aby prawidłowo zweryfikować łańcuch wystawców certyfikatu serwera OPC UA. Certyfikat urzędu certyfikacji i jego plik listy CRL można dodać do oddzielnej listy o nazwie aio-opc-ua-broker-issuer-list.

    Wypchnij certyfikat urzędu certyfikacji w usłudze Azure Key Vault jako wpis tajny.

    W przypadku *.der pliku w formacie pliku ./my-server-ca.der uruchom następujące polecenie:

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

    W przypadku *.crt pliku certyfikatu formatu pliku (PEM) ./my-server-ca.crt uruchom następujące polecenie:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <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 <azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Skonfiguruj zasób niestandardowy klasy dostawcy wpisów tajnych (SPC) aio-opc-ua-broker-issuer-list w połączonym klastrze. Użyj klienta K8s, takiego jak kubectl, aby skonfigurować wpisy tajne (my-server-ca-der lub my-server-ca-crt w poniższym przykładzie) w tablicy obiektów SPC w połączonym klastrze.

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.der konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <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
    

    W poniższym przykładzie przedstawiono kompletny certyfikat SPC CR zawierający zaufany certyfikat serwera OPC UA w *.crt konfiguracji formatu pliku:

    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: <azure-key-vault-name>
        tenantId: <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
    

    Projekcja wpisów tajnych i certyfikatów usługi Azure Key Vault w klastrze trwa trochę czasu w zależności od skonfigurowanego interwału sondowania.

Eksportowanie certyfikatu wystąpienia aplikacji brokera OPC UA i ustanawianie wzajemnego zaufania z serwerem OPC UA

Po zaufaniu certyfikatu serwera OPC UA należy wyodrębnić certyfikat brokera OPC UA z wpisu tajnego kubernetes i dodać go do listy zaufanych certyfikatów serwera OPC UA.

  1. Wyodrębnij certyfikat brokera OPC UA do opcuabroker.crt pliku:

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

    W programie PowerShell można wykonać to samo zadanie za pomocą następującego polecenia:

    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. Wiele serwerów OPC UA obsługuje tylko certyfikaty w *.der formacie pliku. W razie potrzeby użyj następującego polecenia, aby przekonwertować wyodrębniony opcuabroker.crt certyfikat na opcuabroker.der:

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Zapoznaj się z dokumentacją serwera OPC UA i dodaj opcuabroker.crt plik or opcuabroker.der do zaufanych certyfikatów.

Konfigurowanie certyfikatu wystąpienia aplikacji klasy korporacyjnej OPC UA

W środowiskach produkcyjnych można skonfigurować brokerA OPC UA do używania certyfikatu wystąpienia aplikacji klasy korporacyjnej. Zazwyczaj urząd certyfikacji przedsiębiorstwa wystawia ten certyfikat, dlatego potrzebny jest certyfikat urzędu certyfikacji w konfiguracji. Często jest zaangażowana hierarchia urzędów certyfikacji. Potrzebny jest pełny łańcuch weryfikacji urzędów certyfikacji dla konfiguracji.

Następujące przykłady kodu odwołują się do następujących elementów:

  • opcuabroker-certificate.der — certyfikat klucza publicznego pliku certyfikatu wystąpienia aplikacji klasy korporacyjnej
  • opcuabroker-certificate.pem — certyfikat klucza prywatnego pliku certyfikatu wystąpienia aplikacji klasy korporacyjnej
  • subjectName — nazwa podmiotu osadzona w certyfikacie wystąpienia aplikacji w formacie ciągu. Wartość domyślna to: "CN=aio-opc-opcuabroker". Najlepiej, aby certyfikat klasy korporacyjnej był już generowany z domyślną nazwą podmiotu
  • applicationUri — identyfikator URI wystąpienia aplikacji osadzony w certyfikacie wystąpienia aplikacji. Wartość domyślna to: "urn:microsoft.com:aio:opc:opcuabroker". Najlepiej, aby certyfikat klasy korporacyjnej był już generowany przy użyciu domyślnego identyfikatora URI aplikacji.
  • enterprise-grade-ca-1.der — certyfikat klucza publicznego pliku urzędu certyfikacji klasy korporacyjnej
  • enterprise-grade-ca-1.crl — plik listy odwołania certyfikatów urzędu certyfikacji (CRL)

W celu skonfigurowania certyfikatu wystąpienia aplikacji klasy korporacyjnej usługa Azure Key Vault i mechanizm CSI / secrets provider class (CSP) służy do projekcji certyfikatów w klastrze kubernetes.

Aby skonfigurować certyfikat wystąpienia aplikacji klasy korporacyjnej, wykonaj następujące kroki.

  1. Wypchnij wszystkie certyfikaty i do usługi Azure Key Vault przy użyciu następujących poleceń:

     # Upload OPC UA Broker public key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "opcuabroker-certificate-der" \
       --vault-name <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 <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 <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 <azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.crl \
       --encoding hex \
       --content-type application/pkix-crl
    
  2. Skonfiguruj zasób niestandardowy klasy aio-opc-ua-broker-client-certificate dostawcy wpisów tajnych (CR) w połączonym klastrze. Użyj klienta K8s, takiego jak kubectl, aby skonfigurować wpisy opcuabroker-certificate-der tajne i opcuabroker-certificate-pem w tablicy obiektów SPC w połączonym klastrze.

    W poniższym przykładzie pokazano kompletny crC SPC po dodaniu konfiguracji wpisów tajnych:

    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: <azure-key-vault-name>
        tenantId: <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. Jeśli używasz urzędu certyfikacji, skonfiguruj niestandardowy zasób klasy aio-opc-ua-broker-issuer-list dostawcy wpisów tajnych (CR) w połączonym klastrze. Użyj klienta K8s, takiego jak kubectl, aby skonfigurować wpisy enterprise-grade-ca-1-der tajne i enterprise-grade-ca-1-crl w tablicy obiektów SPC w połączonym klastrze.

    W poniższym przykładzie pokazano kompletny crC SPC po dodaniu konfiguracji wpisów tajnych:

    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: <azure-key-vault-name>
        tenantId: <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. Zaktualizuj wdrożenie brokera OPC UA, aby użyć nowego źródła CPS dla certyfikatów wystąpień aplikacji przy użyciu następującego polecenia:

    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>
    

Teraz, gdy certyfikat przedsiębiorstwa jest używany przez brokera OPC UA, nie zapomnij dodać nowego klucza publicznego certyfikatu na liście zaufanych certyfikatów wszystkich serwerów OPC UA, z którymi należy nawiązać połączenie.