проблемы подключения клиента eclipse milo opcua к серверу ProSYS
Я пытаюсь подключиться к серверу моделирования Prosys opcua с помощью milo (0.4.2)
- Я сгенерировал сертификаты / ключи для пользователя с помощью openssl
- Я сгенерировал сертификат для приложения, используя данный пример из milo sdk, и экспортировал их как файл сертификата и незашифрованный файл pkcs 8 pem.
- Скопировал оба сертификата в папки prosys
/home/user/.prosysopc/prosys-opc-ua-simulation-server/USERS_PKI/CA/certs
/home/user/.prosysopc/prosys-opc-ua-simulation-server/PKI/CA/certs
Я проверил, что в prosys ui оба сертификата появились и выглядят доверенными
наконец, когда я подключаюсь к режиму аутентификации в качестве сертификата и безопасности транспорта в качестве знака (используя все сгенерированные на шаге 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)
И я действительно вижу, что эти поля идут с пустых проспектов
В основном здесь я застрял, как вы можете видеть на картинке, что я запросил конечную точку с режимом безопасности и получил в ответ, я не знаю, что. Я пробовал все доступные SecurityPolicy, которые предоставляет milo, но во всех случаях сталкивался с одной и той же ситуацией.
Итак, первый вопрос: что должно быть указано в этом securityAlgorithmUri, и нужно ли указывать на proys, чтобы правильно его заполнить?
Ответы
Насколько я могу судить, это ошибка в стеке или на сервере Prosys.
Похоже, что этого не происходит при использовании стандартного транспорта UA TCP, поэтому попробуйте вместо HTTPS.
Напоминаем: проблема с ProSys действительно была связана с использованием протокола opc over https для подключения к серверу.
Итак, после того, как я переключился на opc over tcp, мне удалось обнаружить конечные точки, которые использовали сертификат для аутентификации пользователя и подписи и шифрования безопасности на уровне сообщений.
Кстати: если кто-то будет искать скрипт для создания сертификата пользователя с помощью opensssl, вот пример файла 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 = [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