eclipse milo connessione client opcua ai problemi del server prosys

Sep 29 2020

Sto provando a connettermi al server di simulazione Prosys opcua utilizzando milo (0.4.2)

  1. Ho generato certificati / chiavi per l'utente utilizzando openssl
  2. Ho generato il certificato per l'applicazione utilizzando l'esempio fornito da milo sdk e li ho esportati come file di certificato e file pkcs 8 pem non crittografato.
  3. Ho copiato entrambi i certificati nelle cartelle prosys

/home/user/.prosysopc/prosys-opc-ua-simulation-server/USERS_PKI/CA/certs

/home/user/.prosysopc/prosys-opc-ua-simulation-server/PKI/CA/certs

  1. Ho verificato che in prosys ui entrambi i certificati apparissero e sembrassero affidabili

  2. infine, quando eseguo la connessione con la modalità di autenticazione come certificato e la sicurezza del trasporto come segno (utilizzando tutte le chiavi e i certificati generati nel passaggio 1), mi imbatto in un'eccezione piuttosto divertente all'interno di milo come

Exception in thread "main" java.util.concurrent.ExecutionException: UaException: status=Bad_SecurityChecksFailed, message=unknown securityAlgorithmUri: null
    at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
    at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
    at de.api.snippets.derReader.main(derReader.java:68)
Caused by: UaException: status=Bad_SecurityChecksFailed, message=unknown securityAlgorithmUri: null
    at org.eclipse.milo.opcua.stack.core.security.SecurityAlgorithm.fromUri(SecurityAlgorithm.java:143)
    at org.eclipse.milo.opcua.sdk.client.session.SessionFsmFactory.lambda$createSession$49(SessionFsmFactory.java:852)
    at org.eclipse.milo.opcua.sdk.client.session.SessionFsmFactory$$Lambda$2643/0000000000000000.apply(Unknown Source)
    at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)

E in realtà vedo che questi campi provengono da prosys vuoti

Fondamentalmente qui sono bloccato, come puoi vedere dalla foto che ho richiesto endpoint con modalità di sicurezza e ricevo in risposta non so cosa. Ho provato tutte le SecurityPolicy disponibili fornite da milo ma in tutti i casi mi sono imbattuto nella stessa situazione.

Quindi la prima domanda è cosa deve essere specificato in questo securityAlgorithmUri ed è comunque necessario che prosys lo riempia giusto?

Risposte

KevinHerron Sep 29 2020 at 10:45

Il meglio che posso dire che questo è un bug nello stack o nel server Prosys.

Non sembra verificarsi quando si utilizza il trasporto UA TCP standard, quindi provalo invece di HTTPS.

user3423 Oct 29 2020 at 03:48

Come promemoria: il problema con prosys era davvero dovuto all'uso del protocollo opc su https per connettersi al server.

Quindi, dopo essere passato a opc su tcp, sono riuscito a scoprire endpoint che utilizzavano il certificato per autenticare l'utente e il segno di sicurezza a livello di messaggio e crittografare.

btw: se qualcuno cercherà uno script per generare il certificato utente usando opensssl, ecco un file di configurazione di esempio:

openssl req -x509 -config openssl_cert.conf -extensions 'my server exts' -nodes \
            -days 365 -newkey rsa:2048 -keyout user.key -out user.crt

e il contenuto del file:

[ req ]
prompt             = no
distinguished_name = my dn

[ my dn ]
# The bare minimum is probably a commonName
            commonName = user
           countryName = DE
          localityName = DE
      organizationName = comp
organizationalUnitName = comp Dept.
   stateOrProvinceName = DE
          emailAddress = [email protected]
                  name = user
               surname = user
             givenName = user
              initials = uu
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = clientAuth, codeSigning
keyUsage = digitalSignature, keyAgreement, keyEncipherment, nonRepudiation, dataEncipherment, keyCertSign