проблемы с подключением клиента eclipse milo opcua к серверу prosys

#java #opc-ua #milo

#java #opc-ua #мило

Вопрос:

Я пытаюсь подключиться к серверу моделирования Prosys opcua с помощью milo (0.4.2)

  1. Я сгенерировал сертификаты / ключи для пользователя с помощью openssl
  2. Я сгенерировал сертификат для приложения, используя приведенный пример из milo sdk, и экспортировал их в виде файла сертификата и незашифрованного файла pkcs 8 pem.
  3. Я скопировал оба сертификата в папки prosys

/home/user/.prosysopc/prosys-opc-ua-simulation-server/USERS_PKI/CA/сертификаты

/home/user/.prosysopc/prosys-opc-ua-simulation-server/PKI/CA/сертификаты

  1. Я проверил, что в пользовательском интерфейсе prosys оба сертификата отображаются и выглядят доверенными

  2. наконец, когда я устанавливаю соединение с режимом аутентификации в качестве сертификата и безопасности транспорта в качестве знака (используя все сгенерированные на шаге 1 ключи и сертификаты), я сталкиваюсь с довольно забавным исключением внутри milo, например

 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)

  

И я действительно вижу, что эти поля поступают из prosys пустыми

изображение из сеанса отладки idea

В принципе, здесь я застрял, как вы можете видеть на картинке, что я запросил конечную точку в режиме безопасности и получаю в ответ, я не знаю, что. Я перепробовал все доступные политики безопасности, которые предоставляет milo, но во всех случаях я сталкивался с одной и той же ситуацией.

Итак, первый вопрос заключается в том, что должно быть указано в этом securityAlgorithmUri и в любом случае указать, чтобы prosys правильно его заполнил?

Ответ №1:

Напоминаю: проблема с prosys действительно была связана с использованием opc по протоколу https для подключения к серверу.

Итак, после того, как я переключился на opc через tcp, мне удалось обнаружить конечные точки, которые использовали сертификат для аутентификации пользователя и подписи безопасности на уровне сообщений и шифрования.

кстати: если кто-то будет искать скрипт для генерации сертификата пользователя с использованием openssl, вот пример файла conf:

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

и содержимое файла:

 [ 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 = user@example.com
                  name = user
               surname = user
             givenName = user
              initials = uu
           dnQualifier = some

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

Ответ №2:

Лучшее, что я могу сказать, это ошибка в стеке или сервере Prosys.

Похоже, это не происходит при использовании стандартного транспорта UA TCP, поэтому попробуйте это вместо HTTPS.