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
Vedi anche
Concetti correlati
Procedure correlate
Usare un oggetto Client OPC UA
Usare certificati e chiavi OPC UA
Esempi applicativi
Importare utenti da un altro progetto
Importare traduzioni da un altro progetto
Importare l’interfaccia utente da un altro progetto e monitorare alcune variabili