Skip to content

1.7.16 release changelog updates - #159

Closed
satya200 wants to merge 4 commits into
mainfrom
release/1.7.16
Closed

1.7.16 release changelog updates#159
satya200 wants to merge 4 commits into
mainfrom
release/1.7.16

Conversation

@satya200

@satya200 satya200 commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

No description provided.

satya200 and others added 4 commits May 13, 2026 06:47
…erts (#155)

Co-authored-by: Lasya Prakarsha D V <LasyaPrakarsha_DonthiVenkata@comcast.com>
* RDK-61158: L3 CRL mTLS + cross-signed PKI test infrastructure

- mock-xconf/crl-mtls-server.js: HTTPS mTLS server on port 50061 with live
  CRL reload via setSecureContext(); trusts both CRL PKI and XS-NewRoot CAs;
  loads CRLs for every CA in the chain (OpenSSL 3 CRL_CHECK_ALL requirement)
- mock-xconf/crl-control.js: plain HTTP control server on port 50062
  with POST /crl/revoke and POST /crl/reset endpoints; saves pristine
  CA database at startup for idempotent reset between tests
- mock-xconf/certs.sh: CRL-L3 PKI block generates Root CA + ICA + server cert
  (with SAN mockxconf) + client cert + empty CRLs for every CA in both the
  CRL PKI and XS PKI hierarchies; exports all material to shared volume
- mock-xconf/entrypoint.sh: starts crl-mtls-server when ENABLE_CRL_L3=true
- mock-xconf/Dockerfile: COPY crl-*.js, EXPOSE 50061/50062
- native-platform/certs.sh: install CRL client certs from shared volume
- compose.yaml: expose ports 50061 and 50062

* RDK-61158: OCSP stapling infrastructure — responder (port 50063) + stapling server (port 50064)

* RDK-61158: OCSP certs.sh fixes — strip CRLF from XS scripts, sign ocsp-server cert via openssl ca for DB tracking

* RDK-61158: OCSP stapling server — use 127.0.0.1 for internal responder fetch (mockxconf hostname unreachable from within own container)

* RDK-61158: Refactor — move cert generation to rdk-cert-config scripts, simplify certs.sh to script calls only

* RDK-61158: Add fallback path for CI where rdk-cert-config is at workspace root

* RDK-61158: Add L3 CRL mTLS + cross-signed PKI test infrastructure

- mock-xconf/certs.sh: generate CRL-L3 PKI (CRL client, xsign certs, expired
  bridge); rm -rf stale shared_certs dirs before generation to prevent root-CA
  AKI/SKI mismatch; publish a single readiness sentinel (.l3_pki_ready) only
  AFTER all PKI generation completes, and clear any stale sentinel at startup
- native-platform/certs.sh: wait on the .l3_pki_ready sentinel (not on an
  intermediate cert file) before copying CRL/xsign bundles to /opt/certs/ and
  installing trust anchors; eliminates the race where a stale crl-client.p12
  from a previous run was consumed mid 'rm -rf', aborting container startup
- compose.override.yml: local dev overrides — mount both mock-xconf/certs.sh
  and native-platform/certs.sh; mockxconf-local image; links mock-xconf:mockxconf

Containers start concurrently (bidirectional cert exchange); the terminal
sentinel guarantees native-platform never copies half-written or about-to-be-
wiped cert material. All 8 L3 tests pass across repeated restarts.

* RDK-61158: simplify L3 PKI sync and untrack local-only files

- Remove the .l3_pki_ready sentinel and stale rm -rf cleanup from mock-xconf/certs.sh; CI always starts from a fresh volume so the stale-file race they guarded against cannot occur. The mkdir -p for crl-client/xs-client is kept because generate_crl_test_certs.sh writes CLIENT_OUT_DIR but does not create it.

- Revert native-platform/certs.sh to file-based waits on crl-client.p12 and client-expxs.p12.

- Drop the runtime cert-scripts overlay block from entrypoint.sh.

- Untrack compose.override.yml and .gitattributes (kept as local working-tree files).

* RDK-61158: address Copilot review comments

- crl-control.js: correct header comment (port 50062 is host-published, not network-isolated); rely on path validation for safety, not isolation

- ocsp-stapling-server.js: remove unused node:http import

- native-platform/certs.sh: reuse existing SYSTEM_TRUST_STORE var instead of re-hardcoding the trust dir

- test_docker.py: fix docstring to say 10 Node.js processes (matches assertion)

- compose.yaml: stop host-publishing 50063/50064 (OCSP responder/stapling are internal-only; still EXPOSEd in Dockerfile)

* RDK-61158: make test_docker.py port/process assertions ENABLE_CRL_L3-aware

Assert the L3 ports (50061 CRL mTLS, 50062 CRL control, 50064 OCSP stapling) and the +2 Node.js processes (crl-mtls-server.js, ocsp-stapling-server.js) only when the container was started with ENABLE_CRL_L3=true.

This corrects the earlier hard-coded count (the L3 block adds 2 processes -> 11 total, not 10) and keeps the test valid in verify-build.yml CI, which starts mockxconf without ENABLE_CRL_L3 (9 processes, base ports only).

50063 (openssl OCSP responder) is IPv4-only and never appears in /proc/net/tcp6, so it is intentionally not asserted.

Verified against the live L3 stack: 6 passed, 2 skipped.

* RDK-61158: restrict copied client .p12 bundles to 600 in native-platform certs.sh

* RDK-61158: staple OCSP response for any status and always clean up temp DER file

* RDK-61158: harden crl-control path validation and JSON handling; clarify key-log comment

* RDK-61158: gate xsign copy on NewRoot.pem sentinel to avoid expired-bridge race

* RDK-61158: align mock-xconf/native-platform with L3 review changes

- remove the /crl/reset endpoint and pristine-DB logic from crl-control.js
  (revocation is now permanent, matching the updated tests)
- drop the separate generate_xs_crl_and_expired_bridge.sh invocation from
  mock-xconf/certs.sh now that its logic lives in
  generate_cross_signed_test_certs.sh
- update native-platform/certs.sh comment to reference the merged
  cross-signed generator

* RDK-61158: gate native xsign wait on client-expxs.p12 sentinel

Switch the xsign readiness wait from NewRoot.pem to client-expxs.p12, which
generate_cross_signed_test_certs.sh now writes exactly once (expired bridge)
and last. Its presence guarantees NewRoot.pem and the other xsign bundles are
already in place, with no valid-vs-expired race. Drop the now-redundant
'if [ -f NewRoot.pem ]' guards and update the mock-xconf certs.sh comment.

* RDK-61158: harden crl-control.js per Copilot review

- isAllowedCertPath(): reject symlinks and validate the realpath stays within CERT_BASE (and is a regular file), preventing symlink-escape of the published control endpoint.

- readBody(): cap request body at 64 KiB and reject oversized payloads to avoid a memory-DoS on the host-published HTTP port; /crl/revoke now returns 413 for payload-too-large.

- openssl ca (gencrl/revoke): add timeout and maxBuffer so a stuck openssl process cannot wedge the control server.

* RDK-61158: pin rdk-cert-config clone to 1.0.6 tag in mock-xconf and native-platform images

* RDK-61158: fix Copilot-flagged doc/comment inconsistencies (revoke wording, OCSP query URL, readiness sentinel)

* RDK-61158: document L3 CRL/cross-signed/OCSP test infrastructure

Adds docs/l3/ covering the PR #153 changes: CRL mTLS server + live revocation, cross-signed bridge PKI, and OCSP stapling, plus the compose/entrypoint/certs.sh wiring and test assertions.

* RDK-61158: bound L3 cert wait loops with timeout; clarify OCSP responder bind

- native-platform/certs.sh: add CRL_L3_WAIT_TIMEOUT_SEC (default 120s) to both shared-volume wait loops so a missing export fails fast instead of hanging the container/CI (Copilot review).

- mock-xconf/entrypoint.sh: document that openssl 3.0 ocsp responder has no bind-address option and 50063 is internal-only (not host-published), addressing the Copilot -host suggestion which is a no-op in responder mode.

* RDK-61158: include ICA in server cert chain; bind CRL control to localhost

- crl-mtls-server.js: send leaf + ICA in cert option so clients can verify
  without needing Test-CRL-ICA pre-installed (Copilot review).
- ocsp-stapling-server.js: same — send leaf + ICA; drop ca array (unused
  for one-way TLS with requestCert:false).
- compose.yaml: bind 50062 (CRL control, plain HTTP) to 127.0.0.1 so it
  is not exposed on all host interfaces (Copilot review).

* RDK-61158: restructure CRL/cross-signed/OCSP docs into cert subsystem and wire indexes

- Remove docs/l3/ (standalone L3 doc structure)
- Add docs/certificates/crl-mtls.md, cross-signed-pki.md, ocsp-stapling.md
  as flat peer pages alongside pkcs11.md and xpki-certifier.md
- Wire new pages into docs/README.md and docs/certificates/README.md indexes
- Add ENABLE_CRL_L3, CRL_L3_WAIT_TIMEOUT_SEC env vars and ports 50061-50064
  to docs/certificates/configuration.md
- Updated for fe857f5: 50062 bound to 127.0.0.1, server sends leaf+ICA chain

* RDK-61158: apply least-privilege cap_drop ALL to all compose services (Coverity SIGMA fix)

---------

Co-authored-by: Donthi Venkata <ldonth501@apac.comcast.com>
Co-authored-by: Lasya Prakarsha D V <LasyaPrakarsha_DonthiVenkata@comcast.com>
Copilot AI review requested due to automatic review settings August 3, 2026 05:59
@satya200
satya200 requested a review from a team as a code owner August 3, 2026 05:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the Docker-based test harness to support L3 certificate-revocation scenarios (CRL mTLS, cross-signed/bridge PKI, and OCSP stapling), updates the pinned rdk-cert-config dependency, and adds a full certificate-subsystem documentation set alongside compose hardening.

Changes:

  • Add CRL mTLS (50061/50062), cross-signed PKI artifacts, and OCSP stapling (50063/50064) to mock-xconf + corresponding native-platform cert pickup/trust-store updates (gated by ENABLE_CRL_L3).
  • Update harness validation to account for L3 ports/process counts when enabled.
  • Add/organize certificate subsystem docs and update rdk-cert-config version pins.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
test_docker.py Makes expected ports and Node process counts conditional on ENABLE_CRL_L3.
native-platform/Dockerfile Bumps rdk-cert-config dependency tag to 1.0.6.
native-platform/certs.sh Adds ENABLE_CRL_L3 block to copy CRL/xsign assets and install test roots into system trust.
mock-xconf/ocsp-stapling-server.js Adds a new OCSP-stapling HTTPS server on port 50064 with periodic cache refresh.
mock-xconf/entrypoint.sh Starts CRL mTLS server and OCSP responder/stapling stack when ENABLE_CRL_L3=true.
mock-xconf/Dockerfile Pins rdk-cert-config to 1.0.6, adds new JS servers, exposes new ports.
mock-xconf/crl-mtls-server.js Adds mTLS server enforcing CRLs, with live reload support via setSecureContext().
mock-xconf/crl-control.js Adds HTTP control endpoint to revoke certs and regenerate/reload CRLs.
mock-xconf/certs.sh Generates CRL/OCSP PKI and cross-signed PKI under ENABLE_CRL_L3.
docs/README.md Adds documentation index for the harness and certificate subsystem.
docs/certificates/README.md Adds top-level certificate subsystem overview and link index.
docs/certificates/architecture.md Documents PKI hierarchy and shared-volume trust flow.
docs/certificates/certificate-lifecycle.md Documents ordered startup/generation/exchange lifecycle.
docs/certificates/shared-volume-contract.md Documents shared-volume file contract and cleanup semantics.
docs/certificates/configuration.md Documents env vars, ports, paths, and CertSelector configuration.
docs/certificates/pkcs11.md Documents PKCS#11/SoftHSM flow in native-platform.
docs/certificates/xpki-certifier.md Documents xPKI certifier behavior and endpoints.
docs/certificates/crl-mtls.md Documents CRL mTLS + live revocation architecture.
docs/certificates/cross-signed-pki.md Documents bridge/cross-signed PKI artifacts and tests.
docs/certificates/ocsp-stapling.md Documents OCSP responder + stapling server design and verification.
docs/certificates/troubleshooting.md Adds troubleshooting guide for certificate subsystem failures.
compose.yaml Adds L3 ports/env toggles and capability/security hardening for services.
CHANGELOG.md Adds 1.7.16 section entries.
.github/skills/technical-documentation-writer/SKILL.md Adds a documentation-writing skill reference for this repo.
Suppressed comments (1)

test_docker.py:73

  • container.exec_run("cat /proc/net/tcp6") is executed once per port, which adds noticeable overhead (and scales with the new L3 port list). You can run it once and reuse the output when checking multiple ports.
    for port in expected_ports:
        hex_port = format(port, '04x').upper()  # Convert port number to uppercase hex (e.g., 50050 -> 'C382')
        exit_code, output = container.exec_run("cat /proc/net/tcp6")

        print(f"Checking port {port} (Hex: {hex_port}) inside mockxconf...")

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread CHANGELOG.md
Comment on lines +7 to +8
#### [1.7.16](https://github.com/rdkcentral/docker-device-mgt-service-test/compare/1.7.15...1.7.16)

Comment on lines +7 to +9
by `ENABLE_CRL_L3` (default `false`) and, like the baseline mTLS flow, only
matters when `ENABLE_MTLS=true`. When the flag is unset, none of the servers or
PKI below are created.
Comment thread CHANGELOG.md
#### [1.7.16](https://github.com/rdkcentral/docker-device-mgt-service-test/compare/1.7.15...1.7.16)

- RDK-61158: L3 CRL mTLS + cross-signed PKI test infrastructure [`#153`](https://github.com/rdkcentral/docker-device-mgt-service-test/pull/153)
- RDK-61158 Enhace Documentation of docker changes with respective to certs [`#155`](https://github.com/rdkcentral/docker-device-mgt-service-test/pull/155)

@tdeva14 tdeva14 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@satya200 satya200 closed this Aug 3, 2026
@satya200
satya200 deleted the release/1.7.16 branch August 3, 2026 06:45
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 3, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants