Eclipse milo opcua conexão do cliente com problemas do servidor Prosys
Estou tentando me conectar ao servidor de simulação Prosys opcua usando milo (0.4.2)
- Eu gerei certificados / chaves para o usuário usando o openssl
- Eu gerei o certificado para o aplicativo usando o exemplo dado de milo sdk e os exportei como arquivo de certificado e arquivo pkcs 8 pem não criptografado.
- Copiei ambos os certificados para pastas prosys
/home/user/.prosysopc/prosys-opc-ua-simulation-server/USERS_PKI/CA/certs
/home/user/.prosysopc/prosys-opc-ua-simulation-server/PKI/CA/certs
Verifiquei se no prosys ui os dois certificados apareceram e parecem confiáveis
finalmente, quando estou fazendo conexão com o modo de autenticação como certificado e segurança de transporte como Sinal (usando todas as chaves e certificados gerados na etapa 1), então encontro uma exceção muito engraçada dentro do milo, como
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 eu realmente vejo que esses campos vêm de prosys vazios
Basicamente aqui estou travado, como podem ver na foto que solicitei endpoint com modo de segurança e recebo em resposta não sei o quê. Tentei todas as SecurityPolicy disponíveis que a milo oferece, mas em todos os casos encontrei a mesma situação.
Portanto, a primeira pergunta é o que deve ser especificado neste securityAlgorithmUri e é de qualquer maneira apontar para prosys para preenchê-lo corretamente?
Respostas
O melhor que posso dizer é que esse é um bug na pilha ou no servidor da Prosys.
Não parece ocorrer ao usar o transporte TCP UA padrão, então tente em vez de HTTPS.
Como um lembrete: o problema com a prosys realmente era devido ao uso do protocolo opc sobre https para se conectar ao servidor.
Então, depois de mudar para opc sobre tcp, consegui descobrir endpoints que faziam uso de certificado para autenticar usuários e assinar e criptografar segurança de nível de mensagem.
btw: se alguém estiver procurando um script para gerar o certificado do usuário usando o opensssl, aqui está um arquivo de configuração de amostra:
openssl req -x509 -config openssl_cert.conf -extensions 'my server exts' -nodes \
-days 365 -newkey rsa:2048 -keyout user.key -out user.crt
e conteúdo do arquivo:
[ 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