THRIFT-6078: Send SNI from Ruby SSL clients#3626
Merged
Merged
Conversation
Client: rb Co-Authored-By: OpenAI Codex (GPT-5.4) <codex@openai.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the Ruby Thrift::SSLSocket transport to send SNI (Server Name Indication) during the TLS handshake by configuring the OpenSSL socket’s server hostname before connecting, and adds an optional server_hostname: override to support connections where the dialed address and expected DNS name differ.
Changes:
- Set
OpenSSL::SSL::SSLSocket#hostname=(when appropriate) prior to the TLS handshake so Ruby clients emit SNI. - Add
server_hostname:(defaulting tohost) and use it for hostname verification, while avoiding SNI for IP-literal hostnames. - Extend Ruby specs to cover SNI behavior, server hostname override, and explicit SNI disablement.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| lib/rb/lib/thrift/transport/ssl_socket.rb | Adds server_hostname support and configures SNI/verification behavior for Ruby SSL sockets. |
| lib/rb/spec/ssl_socket_spec.rb | Updates and adds tests validating SNI setting, hostname override behavior, and SNI suppression for IP literals / explicit disablement. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Some TLS terminators, proxies, and load balancers require SNI in the
ClientHelloto route the connection or select the correct certificate. Ruby clients previously performed post-handshake hostname verification, but did not send a server hostname during the handshake.Ruby
Thrift::SSLSocketnow sets the OpenSSL server hostname before starting the TLS handshake, allowing clients to send SNI for hostname-based SSL connections.It also adds an optional
server_hostname:override for cases where the client connects to one address but needs to indicate and verify a different DNS name.[skip ci]anywhere in the commit message to free up build resources.