You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,20 @@
1
1
# Changelog
2
2
3
+
## [4.1.0] - 2026-04-13
4
+
5
+
### Added
6
+
7
+
-**ECC security policy support.**`security_policy` config key now accepts `ECC_nistP256`, `ECC_nistP384`, `ECC_brainpoolP256r1`, and `ECC_brainpoolP384r1` in addition to the existing 6 RSA policies. Added to `resolveSecurityPolicyUri()` in both `OpcuaManager` and `SessionCommand`. No `client_certificate`/`client_key` needed — ECC certificates are auto-generated when omitted. Username/password authentication uses the `EccEncryptedSecret` protocol automatically.
8
+
-**ECC disclaimer:** No commercial OPC UA vendor supports ECC endpoints yet. This implementation is tested exclusively against the OPC Foundation's UA-.NETStandard reference stack.
9
+
10
+
### Changed
11
+
12
+
- Bumped minimum `php-opcua/opcua-client` dependency from `^4.0.0` to `^4.1` and `php-opcua/opcua-session-manager` from `^4.0.3` to `^4.1`.
13
+
- Security support expanded from 6 to **10 policies** (6 RSA + 4 ECC).
14
+
- Updated CI test server suite from `php-opcua/uanetstandard-test-suite@v1.0.0` to `@v1.1.0`.
15
+
- Updated `config/opcua.php` security policy comment to list all 10 available policies including ECC.
16
+
- Updated documentation (README, doc/07-security.md, doc/09-examples.md, llms.txt, llms-full.txt, llms-skills.md) to reflect ECC support, add ECC `.env` examples, and include the ECC disclaimer.
> **ECC disclaimer:** ECC security policies (`ECC_nistP256`, `ECC_nistP384`, `ECC_brainpoolP256r1`, `ECC_brainpoolP384r1`) are fully implemented and tested against the OPC Foundation's UA-.NETStandard reference stack. However, no commercial OPC UA vendor supports ECC endpoints yet. When using ECC, client certificates are auto-generated if `client_certificate`/`client_key` are omitted, and username/password authentication uses the `EccEncryptedSecret` protocol automatically.
259
262
|**History Read**| Raw, processed, and at-time historical queries |
260
263
|**Typed Returns**| All service responses return `public readonly` DTOs |
80+ unit tests with **99%+ code coverage**. Integration tests run against [uanetstandard-test-suite](https://github.com/php-opcua/uanetstandard-test-suite) — a Docker-based OPC UA environment built on the OPC Foundation's UA-.NETStandard reference implementation — in both direct and managed (daemon) modes.
282
+
146+ unit tests with **99%+ code coverage**. Integration tests run against [uanetstandard-test-suite](https://github.com/php-opcua/uanetstandard-test-suite) — a Docker-based OPC UA environment built on the OPC Foundation's UA-.NETStandard reference implementation — in both direct and managed (daemon) modes.
Copy file name to clipboardExpand all lines: ROADMAP.md
+8-1Lines changed: 8 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
> **A note on versioning:** We're aware of the rapid major releases in a short time frame. This library is under active, full-time development right now — the goal is to reach a production-stable state as quickly as possible. Breaking changes are being bundled and shipped deliberately to avoid dragging them out across many minor releases. Once the API surface settles, major version bumps will become rare. Thanks for your patience.
4
4
5
-
## v4.0.0
5
+
## Planned
6
6
7
7
### Features
8
8
@@ -21,6 +21,13 @@
21
21
-[ ] Middleware — `EnsureOpcuaConnected` middleware that guarantees a live connection for the duration of the request and disconnects in `terminate()`
22
22
-[ ] Lazy proxy — return a lazy proxy from `connection()` that defers the actual TCP/IPC handshake until the first operation, reducing boot overhead when the connection may not be needed
> **Tip:** For new deployments, use `Basic256Sha256` or `Aes256Sha256RsaPss`. The older policies (`Basic128Rsa15`, `Basic256`) exist for legacy server compatibility.
20
+
> **Tip:** For new deployments, use `Basic256Sha256`, `Aes256Sha256RsaPss`, or one of the ECC policies. ECC policies use Elliptic Curve Diffie-Hellman for key agreement and HKDF for key derivation instead of RSA encryption — they offer equivalent security with smaller keys and faster handshakes. The older policies (`Basic128Rsa15`, `Basic256`) exist for legacy server compatibility.
When a security policy and mode are configured but no `client_certificate` / `client_key` are provided, the underlying client automatically generates a self-signed RSA 2048 certificate in memory with proper OPC UA extensions.
116
+
When a security policy and mode are configured but no `client_certificate` / `client_key` are provided, the underlying client automatically generates a self-signed certificate in memory with proper OPC UA extensions. For RSA policies, a 2048-bit RSA certificate is generated. For ECC policies, an EC certificate matching the policy's curve (NIST P-256/P-384 or Brainpool P-256/P-384) is generated.
113
117
114
118
```php
115
119
'connections' => [
@@ -164,7 +168,7 @@ The `security_policy` config key accepts both short names and full OPC UA URIs:
**Phase 1 — Discovery.** The client connects without security, calls `GetEndpoints`, and retrieves the server's certificate.
208
212
209
-
**Phase 2 — Asymmetric (OpenSecureChannel).**The client sends an OPN request encrypted with the server's public key. Both sides exchange nonces. Symmetric keys are derived from the shared nonces.
213
+
**Phase 2 — Asymmetric (OpenSecureChannel).**For RSA policies, the client sends an OPN request encrypted with the server's public key; both sides exchange nonces and derive symmetric keys via P_SHA. For ECC policies, the OPN is signed (not encrypted) with ECDSA; both sides exchange ephemeral EC public keys and derive symmetric keys via ECDH + HKDF.
210
214
211
215
**Phase 3 — Symmetric (Session + Messages).** All subsequent messages (CreateSession, ActivateSession, Read, Write, etc.) use the derived symmetric keys — signed with HMAC and encrypted with AES-CBC.
0 commit comments