SNI support for Sentinel connections with TLS #1837
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, when connecting to Redis with Sentinel, the
servername
attribute required for the SNI (Server Name Indication) TLS extension is not updated. Therefore, in cases where the connection relies on SNI, connections will fail as SNI routing cannot be properly handled.This issue is caused by the dynamic nature of Redis instances handled by Sentinel. Even though the
servername
attribute can be set on thetls
object on connection, it would need to be set to the host of the current master instance which is unknown at the point of connection and can change in case of failover events. Therefore a solution which dynamically assigns theservername
attribute according to the current master is necessary.This PR adds a flag
enableDynamicSNIForSentinelMode
toSentinelConnectionOptions
which dynamically sets theservername
attribute on the Redis instance Sentinel has elected to connect to.The flag only works in combination with
enableTLSForSentinelMode
andtls
on theSentinelConnectionOptions
object.This PR addresses this issue.
The PR does not break existing behaviour and ensures backwards compatibility of the ioredis library. Appropriate tests and updates to the Readme are included.