eclipse milo connessione client opcua ai problemi del server prosys
Sto provando a connettermi al server di simulazione Prosys opcua utilizzando milo (0.4.2)
- Ho generato certificati / chiavi per l'utente utilizzando openssl
- 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.
- 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
Ho verificato che in prosys ui entrambi i certificati apparissero e sembrassero affidabili
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
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.
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