Open JamesGibo opened 4 years ago
Would like to clarify that if we decided node will have the /reload-config endpoint, how to perfom differently between exceute reload and read reload status, by just using the POST request?
Is that what you think of the usage?
reload config - HTTP POST with a configuration file json body
read reload status- HTTP POST with no json body
If we wish to have a 'read' mechanism I'd suggest we just implement a GET in addition.
I think the confusion here is how to check that the certificate has been renewed. Simon's interpretation of the proposal was that the same endpoint was to be used to initiate renewal AND check whether the renewal was successful. In this case a POST and GET on the same endpoint for renewal and status? Or a separate endpoint for status?
Hi Everyone!
I think the approach we use will need to accomodate multiple scenarios (systems which have a control system and systems which don't).
One such approach would be for the nodes to host a /scheduled_cert_renewal endpoint where it returns the time when it desires to perform the renewal.
If a client/control system POSTs a new timestamp/time then it will schedule the renewal at that time. If no client/control system is present then the node will continue to perform its renewal and the initial proposed time.
Discussion on today's call: Does a websocket connection remain open through a renewal? Or an HTTP sequence? What are the real costs involved? OpenSSL-based systems seem to be ok changing a cert, but bare-metal libraries typical for low-power devices less so, and typically need a few seconds to restart. They may not be powerful enough to generate a new keypair while streaming. Possible approach discussed on call, using either a new API or an additional parameter on System API. We will consider longer term solutions (probably v1.1) and meanwhile can recommend sensible advice on updating. Action @JamesGibo.
Discussed on call. The advice is already in progress and any possible longer-term solution needn't hold up v1.0.
This issue should be added to the v1.1 milestone, as it not going going to included in v1.0 and mitigations for low power devices has been added to the BCP in #11 to prevent performance issue.
Consolidating discussion about the reasons for a reload configuration endpoint and its API design from (https://basecamp.com/1791706/projects/15357148/messages/92126983) so they can be discussed on the call.
The primary reason for this endpoint at the moment is to trigger the renewal of a devices' TLS certificate at a defined point in time when the device is not in use, but this API could also be used; to trigger software updates, other configuration changes or support for monitoring data export eg. Prometheus.
Issue
Ultimately if a certificate expires, the device should perform the renew, regardless of if this will affect the primary operation of the device.
Practical Examples
Proposal The proposal is to add a new endpoint to the NMOS Specs
/reload-config
.The
/reload-config
endpoint will cause the device to trigger the certificate renewal process of all its certificates, during this time the primary operation of the device maybe affected.The
/reload-config
endpoint must have authentication, as the effect of calling it is disruptive to the operation of the device.Prometheus has a similar feature for triggering the reload of new configurations using an API: sending a HTTP POST request to the /-/reload endpoint https://prometheus.io/docs/prometheus/latest/configuration/configuration/
If the certificate renewal operation is unsuccessful, the device should carry on using the original certificate if still valid and the operation should be re-tried again at an appropriate time.
An automatic or manual check should be perform after issuing the command to check the certificate has been renewed.
Outstanding Questions:
If it is decided that the endpoint is required, further design decision are required
On the next call I would like to come to a decision as to whether this API is required. Could anyone with practical examples of why this API is required please get in contact and I can anonymously add it to the list of practical examples