This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes-website.git
The following commit(s) were added to refs/heads/dev by this push:
new 08c8a9c70 Add blog post about OPC-UA certificates (#220)
08c8a9c70 is described below
commit 08c8a9c7086590cc6f66bfa2c9f0ec0bfcedd6cb
Author: Dominik Riemer <[email protected]>
AuthorDate: Tue Jun 3 17:32:34 2025 +0200
Add blog post about OPC-UA certificates (#220)
---
website-v2/blog/2025-02-15-release-097.md | 2 +
website-v2/blog/2025-03-25-file-stream-adapter.md | 2 +
website-v2/blog/2025-04-09-javascript-processor.md | 2 +
website-v2/blog/2025-04-28-prompt-processor.md | 4 +-
website-v2/blog/2025-05-20-opc-ua-certificates.md | 188 +++++++++++++++++++++
.../img/blog/2025-05-20/opc-ua-configuration.png | Bin 0 -> 95015 bytes
.../img/blog/2025-05-20/opcua-available-nodes.png | Bin 0 -> 41063 bytes
.../img/blog/2025-05-20/opcua-connection-error.png | Bin 0 -> 45906 bytes
.../img/blog/2025-05-20/opcua-security-dir.png | Bin 0 -> 7998 bytes
.../img/blog/2025-05-20/opcua-server-rejected.png | Bin 0 -> 19266 bytes
10 files changed, 197 insertions(+), 1 deletion(-)
diff --git a/website-v2/blog/2025-02-15-release-097.md
b/website-v2/blog/2025-02-15-release-097.md
index 9dcd69c8f..cdb3effa8 100644
--- a/website-v2/blog/2025-02-15-release-097.md
+++ b/website-v2/blog/2025-02-15-release-097.md
@@ -17,6 +17,8 @@ In total, the new release closes 159 issues including new
features, bug fixes an
Read on to discover what’s new in StreamPipes 0.97.0!
+<!--truncate-->
+
## Adapters & Pipeline Elements
### Adapter & Pipeline as Code
StreamPipes now supports managing adapters and pipelines programmatically
using compact Json or YAML definitions.
diff --git a/website-v2/blog/2025-03-25-file-stream-adapter.md
b/website-v2/blog/2025-03-25-file-stream-adapter.md
index 72c762324..40b667f96 100644
--- a/website-v2/blog/2025-03-25-file-stream-adapter.md
+++ b/website-v2/blog/2025-03-25-file-stream-adapter.md
@@ -11,6 +11,8 @@ Are you excited to explore Apache StreamPipes but find
yourself without any sens
Or maybe you're looking to validate StreamPipes for your use case and kick off
a Proof of Concept (PoC) but the hardware is not yet available?
No worries—the **File Stream Adapter** is here to save the day!
+<!--truncate-->
+
With the File Stream Adapter, you can upload a file containing sensor data in
various formats (JSON, CSV, XML) and replay this data, giving you a hands-on
way to dive into StreamPipes.
It's not meant for production use, but it's perfect for experimenting with
StreamPipes using your own data.
diff --git a/website-v2/blog/2025-04-09-javascript-processor.md
b/website-v2/blog/2025-04-09-javascript-processor.md
index b6fd74be0..2520fbbad 100644
--- a/website-v2/blog/2025-04-09-javascript-processor.md
+++ b/website-v2/blog/2025-04-09-javascript-processor.md
@@ -12,6 +12,8 @@ Don’t worry—we’ve got just the thing for you.
The **JavaScript Evaluator Processor** in Apache StreamPipes allows you to
define custom event logic with just a few lines of JavaScript. Whether you want
to modify values, filter events, or even add stateful logic, this processor
empowers you to do just that—without writing a full processing element in Java.
+<!--truncate-->
+
Let’s take a closer look at how it works, what the configuration options are,
and how you can use it in three different ways.
diff --git a/website-v2/blog/2025-04-28-prompt-processor.md
b/website-v2/blog/2025-04-28-prompt-processor.md
index 6f6bc21f4..be724993e 100644
--- a/website-v2/blog/2025-04-28-prompt-processor.md
+++ b/website-v2/blog/2025-04-28-prompt-processor.md
@@ -13,6 +13,8 @@ Need a quick sentiment check, a rolling summary, or a safety
rule that’s just
With the **Multi-Model Prompt Processor** you can drop the full might of
OpenAI, Anthropic, or your own Llama into any
Apache StreamPipes pipeline—no extra code required.
+<!--truncate-->
+
Below you’ll find:
* A quick tour of the options
@@ -183,4 +185,4 @@ o1-preview-2024-09-12 o3-mini-2025-01-31
Whether you need a lightweight rule engine, live summaries, or just a smarter
filter, the Multi-Model Prompt Processor
drops straight into your pipeline and starts working within minutes.
-Give it a try, and let us know what you build!
\ No newline at end of file
+Give it a try, and let us know what you build!
diff --git a/website-v2/blog/2025-05-20-opc-ua-certificates.md
b/website-v2/blog/2025-05-20-opc-ua-certificates.md
new file mode 100644
index 000000000..176b6536d
--- /dev/null
+++ b/website-v2/blog/2025-05-20-opc-ua-certificates.md
@@ -0,0 +1,188 @@
+---
+title: "Secure OPC-UA Integration with Apache StreamPipes: A Comprehensive
Guide"
+author: Dominik Riemer
+authorURL: "https://github.com/dominikriemer"
+authorImageURL: "/img/about/riemer.png"
+---
+
+With the release of Apache StreamPipes 0.97.0, the OPC UA adapter now supports
encrypted communication using
+certificates, enhancing security for Industrial IoT applications. This guide
walks you through generating certificates,
+configuring them in StreamPipes, and setting up your OPC UA server for secure
communication.
+
+<!--truncate-->
+
+# Introduction
+
+While an unencrypted security policy is the way most users try when they start
testing StreamPipes for their first time,
+production-grade scenarios typically require encrypted communication.
+
+In case you are already using Apache StreamPipes, you might have noticed that
the OPC UA adapter now supports encrypted
+security policies:
+
+<img src="/img/blog/2025-05-20/opc-ua-configuration.png" alt="OPC-UA adapter
configuration"/>
+
+
+In this guide, I'll show how to set up a secure connection between your OPC UA
server and Apache StreamPipes. This guide
+is intended to be a step-by-step-guide starting from certificate generation to
the configuration of the OPC UA adapter
+in StreamPipes.
+
+I'll show a working example on a local installation using Eclipse Milo as the
OPC UA server. The same steps can be
+applied to production systems by integrating certificates into the volume of
the extension service. There are other
+ways to configure OPC-UA secure connections, but this guide will focus on a
complete approach using self-signed
+certificates for beginners.
+
+# Prerequisites
+
+* Apache StreamPipes 0.97.0 or newer
+* An OPC-UA server supporting security policies `Sign` and `Sign & Encrypt`
+* OpenSSL installed on your system
+
+# Generate client certificates
+
+When creating a new OPC-UA adapter in Apache StreamPipes, the extension
service where the adapter is running in serves
+as the client.
+First, we need to create a client certificate for the client. In this example,
we'll create a self-signed certificate.
+
+```bash
+[req]
+default_bits = 2048
+prompt = no
+default_md = sha256
+req_extensions = req_ext
+x509_extensions = v3_ca
+distinguished_name = dn
+
+[dn]
+CN = stream-pipes-client
+
+[req_ext]
+subjectAltName = @alt_names
+keyUsage = digitalSignature, nonRepudiation, keyEncipherment,
dataEncipherment, keyCertSign
+extendedKeyUsage = serverAuth, clientAuth
+
+[v3_ca]
+subjectKeyIdentifier = hash
+basicConstraints = CA:false
+subjectAltName = @alt_names
+keyUsage = digitalSignature, nonRepudiation, keyEncipherment,
dataEncipherment, keyCertSign
+extendedKeyUsage = serverAuth, clientAuth
+
+[alt_names]
+URI.1 = urn:org:apache:streampipes:opcua:client
+```
+
+When using a self-signed certificate, it is requried to to provide the
CA:false flag under basicConstraints.
+In addition, note the subject alternative name that later needs to be matched
by the application URI of the OPC-UA
+client.
+
+The next step is to generate the certificate and import it into a PKCS12
keystore. The keystore is used to store the key
+pair we are generating in the first step.
+
+```bash
+openssl req -x509 -nodes -days 365 \
+ -newkey rsa:2048 \
+ -keyout client.key \
+ -out client.crt \
+ -config cert.conf \
+ && openssl pkcs12 -export \
+ -in client.crt \
+ -inkey client.key \
+ -out client.p12 \
+ -name streampipes-client
+```
+
+When I was asked for a password, I chose `streampipes`. You can choose any
password you like, but make sure to remember
+it, as
+we will need it in the next step.
+
+Check that the keystore lists the correct key by executing:
+
+```bash
+keytool -list -v -storetype PKCS12 -keystore client.p12
+```
+
+You'll see the key you've just generated.
+
+# Configure StreamPipes to support encrypted connections
+
+To enable the OPC UA adapter to use the generated client certificate, we need
to provide a few environment variables to
+StreamPipes.
+
+Here is a list of all environment variables that are available:
+
+* SP_OPCUA_SECURITY_DIR (default: /streampipes-security/opcua): This is the
directory where the keystore and
+ trusted/rejected server certificates are stored.
+* SP_OPCUA_KEYSTORE_FILE (default: keystore.pfx): This is the keystore file
that contains the client certificate.
+* SP_OPCUA_KEYSTORE_PASSWORD (default: password): The password for the
keystore file.
+* SP_OPCUA_KEYSTORE_TYPE (default: PKCS12): The type of the keystore file.
+* SP_OPCUA_KEYSTORE_ALIAS (default: apache-streampipes): The alias of the
client certificate in the keystore.
+* SP_OPCUA_APPLICATION_URI (default: urn:org:apache:streampipes:opcua:client):
The application URI of the client
+ certificate.
+
+We could have made the previous configuration easier by reusing some of the
defaults. For learning purposes, we used
+some other names for the alias and keystore filename.
+
+In my setup, I've started a local StreamPipes instance. When using Docker, you
can add the environment variables to the
+extensions service (e.g., extensions-all-iiot). In my local instance, I just
add the emnvironment variables to my IDE
+settings.
+
+I add the following variables:
+
+```bash
+SP_OPCUA_SECURITY_DIR=/home/user/streampipes-security/opcua
+SP_OPCUA_KEYSTORE_FILE=client.p12
+SP_OPCUA_KEYSTORE_PASSWORD=streampipes
+SP_OPCUA_KEYSTORE_ALIAS=streampipes-client
+```
+
+# Connecting to an OPC-UA server
+
+For this demo, I'm using the Eclipse Milo OPC UA server. You can download it
from [here](https://github.com/digitalpetri/opc-ua-demo-server).
+Once the server is running, you can connect to it using the following URL:
+
+```bash
+opc.tcp://localhost:62541/milo
+```
+
+Now it's time to switch to StreamPipes!
+
+Go to **Connect** -> **New adapter** -> **OPC UA** and enter the following
configuration:
+
+```bash
+Pull interval 1000
+Incomplete Events Ignore
+Security Mode Sign & Encrypt
+Security Policy Basic256Sha256
+URL opc.tcp://localhost:62541/milo
+```
+
+Defocus the URL input field and wait for the OPC-UA server to connect. After a
few seconds, you should see an error message appearing:
+
+<img src="/img/blog/2025-05-20/opcua-connection-error.png" alt="OPC-UA adapter
connection error"/>
+
+This is expected, as we haven't added the client certificate to the trusted
certificates of the OPC-UA server yet.
+So we have to let Milo know that the client certificate can be trusted. In my
local setup, I need to move the client certificate from the `rejected` to the
`trusted/certs` folder as seen below:
+
+<img src="/img/blog/2025-05-20/opcua-server-rejected.png" alt="OPC-UA adapter
rejected client certificate"/>
+
+So let's try again by clicking `Reload` in the `Available Nodes` section of
the adapter configuration page.
+We'll get another error saying that the server certificate is not trusted.
+This is again expected, as we haven't added the server certificate to the
trusted certificates of the OPC-UA client yet.
+
+To do that, we can have a look at the folder structure under
`SP_OPC_UA_SECURITY_DIR`:
+
+<img src="/img/blog/2025-05-20/opcua-security-dir.png" alt="OPC-UA security
directory"/>
+
+Several new folders have been created by the Apache StreamPipes OPC-UA client.
+The `trusted` folder contains the trusted server certificates, while the
`rejected` folder contains the rejected server certificates.
+We'll move the server certificate from the `rejected` folder to the
`trusted/certs` folder.
+
+No we'll try again - and this time, we should see the available nodes in the
adapter configuration page:
+
+<img src="/img/blog/2025-05-20/opcua-available-nodes.png" alt="OPC-UA adapter
available nodes"/>
+
+You'll see the beautiful tree view where you can navigate through all OPC-UA
nodes.
+
+Now you can select the nodes you want to use in your adapter.
+
+That's it! You've successfully configured the OPC-UA adapter to use encrypted
communication with self-signed certificates.
diff --git a/website-v2/static/img/blog/2025-05-20/opc-ua-configuration.png
b/website-v2/static/img/blog/2025-05-20/opc-ua-configuration.png
new file mode 100644
index 000000000..34eaa724d
Binary files /dev/null and
b/website-v2/static/img/blog/2025-05-20/opc-ua-configuration.png differ
diff --git a/website-v2/static/img/blog/2025-05-20/opcua-available-nodes.png
b/website-v2/static/img/blog/2025-05-20/opcua-available-nodes.png
new file mode 100644
index 000000000..b593b4ff3
Binary files /dev/null and
b/website-v2/static/img/blog/2025-05-20/opcua-available-nodes.png differ
diff --git a/website-v2/static/img/blog/2025-05-20/opcua-connection-error.png
b/website-v2/static/img/blog/2025-05-20/opcua-connection-error.png
new file mode 100644
index 000000000..9bf6e7e89
Binary files /dev/null and
b/website-v2/static/img/blog/2025-05-20/opcua-connection-error.png differ
diff --git a/website-v2/static/img/blog/2025-05-20/opcua-security-dir.png
b/website-v2/static/img/blog/2025-05-20/opcua-security-dir.png
new file mode 100644
index 000000000..e85bc1593
Binary files /dev/null and
b/website-v2/static/img/blog/2025-05-20/opcua-security-dir.png differ
diff --git a/website-v2/static/img/blog/2025-05-20/opcua-server-rejected.png
b/website-v2/static/img/blog/2025-05-20/opcua-server-rejected.png
new file mode 100644
index 000000000..25510cc68
Binary files /dev/null and
b/website-v2/static/img/blog/2025-05-20/opcua-server-rejected.png differ