ai-yang opened a new issue, #753:
URL: https://github.com/apache/rocketmq-dashboard/issues/753

   ## Problem
   
   The `/studio/ssl-settings` page reports that SSL configuration was saved 
successfully, but the configuration is neither sent to the server nor applied 
anywhere.
   
   ## Reproduction
   
   1. Open `/studio/ssl-settings`.
   2. Enable SSL/TLS and enter a KeyStore path and password.
   3. Optionally select a supported certificate or KeyStore file.
   4. Click **Save**.
   5. Observe the success notification.
   6. Reload the page or navigate away and return.
   
   The page returns to its hard-coded defaults. No save or upload request is 
sent.
   
   ## Evidence
   
   At `rocketmq-studio` commit `bbf1b7e0cf25a5065ba049b5450cc8155569f710`:
   
   - `handleSave` only waits one second, displays `ssl.saveSuccess`, and 
updates component-local React state.
   - The page imports no API or service and never loads persisted SSL 
configuration.
   - `beforeUpload` returns `false` for every accepted file and there is no 
`action` or `customRequest`, so valid files are never uploaded.
   - Certificate metadata is hard-coded as:
     - issuer: `Let's Encrypt`
     - expiry: `2025-12-31`
   - As of 2026-08-01, that expiry date is already 213 days in the past, but 
the page still renders it with a green `Active` status.
   
   The only related backend endpoint is `/api/ops/updateUseTLS`. It accepts 
only a boolean, is used by the separate Ops page, and stores that value in an 
in-memory field. There is no backend contract for loading, validating, 
persisting, uploading, or applying the KeyStore/TrustStore configuration shown 
by this page.
   
   The K8s certificate endpoints are a separate metadata feature and do not 
accept certificate contents or the SSL settings represented here.
   
   ## Deterministic regression
   
   A real-page Node 20 regression enables TLS, enters a KeyStore path/password, 
clicks **Save**, and advances the existing one-second timer with a fake clock. 
Its guard assertion confirms that the current implementation publishes the 
success notification and retains the fields for the current mount. The test 
then unmounts and reopens the page.
   
   On the latest unmodified `rocketmq-studio` baseline, 5/5 isolated Vitest 
processes failed identically after reopen:
   
   - the saved TLS switch was unchecked; and
   - the submitted KeyStore path was empty.
   
   The current-mount success/retention guard passed in every process. The test 
uses no sleep, network, random scheduling, or external service.
   
   ## Impact
   
   Administrators can be told that TLS was configured even though:
   
   - the selected certificate or KeyStore was never uploaded;
   - paths, passwords, protocol, and client-auth settings were never persisted;
   - no runtime RocketMQ connection or server configuration was changed;
   - an expired, synthetic certificate is displayed as active.
   
   This can lead users to believe that a deployment is protected by TLS when it 
is not.
   
   ## Expected behavior
   
   The page should only report success after the server has validated and 
accepted the configuration.
   
   The intended design should define:
   
   - whether settings apply globally, per RocketMQ cluster, or to Studio's own 
server;
   - how configuration is persisted and reloaded;
   - how KeyStore/TrustStore files and passwords are handled securely;
   - how the configuration is applied to runtime clients or services;
   - how certificate metadata and expiry status are obtained from the actual 
certificate.
   
   If backend support is not intended yet, the page should be disabled or 
clearly identified as unsupported instead of reporting a successful save.
   
   ## Related work
   
   - #477 introduced the SSL settings page.
   - #620 and #675 fixed UI state behavior but did not add persistence or 
application logic.
   - #704 concerns synthetic records in the separate K8s certificate 
repository; this issue concerns the local-only save/upload behavior of 
`/studio/ssl-settings`.
   
   Immediate pre-publication searches across open and closed issues and open, 
closed, and merged pull requests found no equivalent report, claimed 
implementation, or assignee.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to