Sicurezza delle comunicazioni OPC UA

Introduzione

Per instaurare una comunicazione tra client e server, un client deve conoscere alcune informazioni e configurazioni del server. Queste informazioni, elencate di seguito, sono impostate sul server in un endpoint:

  • URL dell’endpoint

  • Policy di sicurezza richiesta dal server (algoritmi)

  • Livello di sicurezza dei messaggi richiesto dal server (firma e cifratura)

In UNIQO queste informazioni si definiscono nelle rispettive proprietà dell’oggetto Server OPC UA.

URL dell’endpoint

L’URL di un endpoint è sempre composto dai seguenti elementi, nell’ordine descritto.

  • Protocollo di comunicazione: opc.tcp

  • Indirizzo di rete, espresso in uno dei seguenti modi:

    • parola chiave localhost: qualsiasi indirizzo locale

    • hostname: nome del dispositivo in rete su cui è ospitato il server

    • indirizzo IP: indirizzo IP del dispositivo in rete su cui è ospitato il server

      Nota

      a meno di esigenze specifiche, usare la parola chiave localhost.

  • Porta

In UNIQO, nell’oggetto Server OPC UA, l’URL predefinito è opc.tcp://localhost:59100.

Policy di sicurezza

OPC UA prevede le seguenti policy di sicurezza, supportate da UNIQO, ognuna delle quali definisce un set di algoritmi e la lunghezza delle chiavi per rendere sicuro lo scambio dei messaggi tra client e server:

  • Aes256_Sha256_RsaPss

  • Aes128_Sha256_RsaOaep

  • Basic256Sha256

  • None (valida solo quando non si eseguono firma e cifratura dei messaggi - vedere Sicurezza dei messaggi)

Per dettagli sulle policy fare riferimento alle specifiche OPC UA.

Nota

le policy supportate dallo standard vengono regolarmente aggiornate. Alcune policy deprecate, ad esempio Basic128Rsa15 e Basic256, sono supportate solo per retrocompatibilità.

In UNIQO, nell’oggetto Server OPC UA, si imposta la policy di sicurezza minima richiesta dal server ai client.

Sicurezza dei messaggi

OPC UA definisce i seguenti livelli di sicurezza, supportati da UNIQO, per i messaggi scambiati tra server e client:

  • Nessuna firma/cifratura

  • Firma di tutti i messaggi

  • Firma e cifratura di tutti i messaggi

In UNIQO, nell’oggetto Server OPC UA, si imposta il livello di sicurezza minimo richiesto dal server ai client.

Client: tipi di autenticazione dell’utente

Quando un client si connette a un server trasmette anche informazioni che identificano l’utente. OPC UA prevede i seguenti tipi di autenticazione, supportati da UNIQO:

  • Anonymous Identity Token: nessuna informazione disponibile sull’utente.

  • Username Identity Token: utente identificato da nome utente e password. Il client invia al server la password dell’utente, per dimostrare che ne conosce l’identità.

  • X.509 Identity Token: utente identificato da un certificato di tipo X.509v3. Il client invia al server una firma creata con la chiave privata associata al certificato, per dimostrare che conosce l’identità dell’utente. In questo caso è necessario installare il certificato sul server.

Per proteggere le credenziali inviate al server, queste sono cifrate con la sua chiave pubblica, anche in assenza di firma e cifratura sui messaggi.

In UNIQO, nell’oggetto Client OPC UA, si imposta il tipo di autenticazione.

Certificati e chiavi in OPC UA

Per identificare i partecipanti a una comunicazione e per garantire l’autenticità e la segretezza dei messaggi scambiati, ogni applicazione OPC UA deve disporre di un certificato pubblico (Application Instance Interface) e di una coppia chiave pubblica/chiave privata .

La chiave pubblica è distribuita con il certificato, mentre la chiave privata rimane segreta. Le chiavi sono usate come segue:

  • La propria chiave privata è usata per firmare i messaggi da inviare e per decifrare i messaggi ricevuti.

  • La chiave pubblica del partner è usata per verificare la firma dei messaggi ricevuti e per cifrare i messaggi da inviare.

I certificati sono archiviati in un Certificate Store, suddiviso nelle seguenti locazioni:

  • Own: contiene certificato dell’applicazione

  • Trusted: contiene certificati di applicazioni remote affidabili

  • Rejected: contiene certificati di applicazioni remote che si sono connesse ma non ancora considerate affidabili

  • Certificate Revocation List (CRL): certificati revocati da una Certification Authority (CA) prima della loro scadenza.

I certificati rilasciati da un’applicazione sono detti self-signed e devono essere installati tra quelli affidabili, sia sul server che sul client, per permettere la comunicazione. Quando si rimuove il certificato da quelli affidabili, la comunicazione non è più possibile.

Per i certificati rilasciati da una CA non è necessaria l’installazione tra quelli affidabili. In questo infatti basta installare il certificato della CA. Per escludere un certificato rilasciato da una CA, esso dev’essere incluso nella CRL della CA.

Nota

ogni certificato di una CA deve essere corredato dalla corrispondente CRL, necessaria per verificare il certificato di un’applicazione.

I certificati e le CRL devono rispettare lo standard X.509v3 con codifica binaria DER. Sono solitamente contenuti in file con estensione .der. A ogni certificato corrisponde una chiave privata e codifica ASCII Base64, solitamente contenuta in un file con estensione .pem.

Tutte le policy di sicurezza valide richiedono la firma dei certificati con l’algoritmo SHA-256 con cifratura RSA (2048, 3072 o 4096). Le due policy deprecate, ovvero Basic128Rsa15 e Basic256, richiedono invece che il certificato sia firmato con l’algoritmo SHA1 con cifratura RSA (1024 o 2048).

Certificati e chiavi in UNIQO

In Q Studio, negli oggetti Server OPC UA e Client OPC UA è possibile impostare il certificato pubblico e la chiave privata del server/client. In mancanza di questi elementi, tipicamente in fase di test di un progetto, quando Q Studio genera una Q Application server genera anche un certificato pubblico e la corrispondente chiave privata del server.

Importante

per comunicare in sicurezza, i certificati pubblici di client e server devono essere considerati affidabili da entrambe le parti. Una Q Application considera affidabili soltanto i certificati presenti nella sua cartella ProjectFiles/PKI/Trusted/.

A design time, se si dispone dei certificati propri o di altri client/server sul campo, è possibile importarli in Q Studio per considerarli affidabili (vedere Impostare i certificati affidabili a design time).

Nota

se non si dispone di un certificato per la propria applicazione è possibile generarlo in Q Studio (vedere Generare certificati OPC UA in Q Studio).

Se a design time non si dispone dei certificati di altri client/server sul campo è possibile importarli nel progetto, e quindi considerarli affidabili, a runtime una volta avvenuto il collegamento tra le parti (vedere Impostare i certificati affidabili a runtime). A runtime infatti, quando un client si connette a un server e i rispettivi certificati non sono considerati affidabili, il certificato del client viene copiato nella cartella QApplication/ApplicationFiles/PKI/Rejected/Client dell’applicazione server e il certificato del server nella cartella QApplication/ApplicationFiles/PKI/Rejected/Server dell’applicazione client.

Nota

il nome del certificato copiato è una stringa composta dal suo Common Name (CN) e dal suo thumbprint (firma).

Se, infine, a design time si esegue l’importazione di nodi da un server OPC UA tramite un oggetto Client OPC UA e il progetto non dispone del certificato pubblico del server, Q Studio mostra un messaggio di errore che informa sul rifiuto del certificato del server e la copia del certificato nella cartella ApplicationFiles/PKI/Rejected/Server del progetto. Anche in questo caso è possibile importarlo nel progetto per considerarlo affidabile (Impostare i certificati affidabili a design time).

Posizione di certificati e chiavi nei progetti UNIQO e nelle Q Application

In UNIQO i certificati e chiavi sono organizzati nella seguente struttura di cartelle:

QApplication/ProjectFiles/PKI/

  • Own/

    • Client/: certificati e chiavi private dei client

    • Server/: certificato e chiave privata del server

    • User/: certificati e chiavi private degli utenti

  • Revoked/

    • Client/: CRL dei certificati revocati dei client. È usata dall’oggetto Server OPC UA.

    • Issuer/: CRL dei certificati revocati delle CA. È usata sia dall’oggetto Server OPC UA che dagli oggetti Client OPC UA.

    • Server/: CRL dei certificati revocati dei server. È usata dagli oggetti Client OPC UA.

    • User/: CRL dei certificati revocati degli utenti. È usata dall’oggetto Server OPC UA.

  • Trusted/

    • Client/: certificati affidabili dei client. È usata dall’oggetto Server OPC UA.

    • Issuer/: certificati affidabili delle CA. È usata sia dall’oggetto Server OPC UA che dagli oggetti Client OPC UA.

    • Server/: certificati affidabili dei server. È usata dagli oggetti Client OPC UA.

    • User/: certificati affidabili degli utenti. È usata dall’oggetto Server OPC UA.

QApplication/ApplicationFiles/PKI/

  • Own/

    • Server/: certificato e chiave privata generati automaticamente dall’oggetto Server OPC UA

  • Rejected/

    • Client/: certificati dei client che si sono connessi al server e che non sono ancora considerati affidabili

    • Server/: certificati dei server a cui si sono connessi i client OPC UA e che non sono ancora considerati affidabili

    • User/: certificati degli utenti che si sono connessi al server e che non sono ancora considerati affidabili