Dmytro Shteflyuk created THRIFT-6098:
----------------------------------------

             Summary: Ruby SSLSocket should verify peers by default
                 Key: THRIFT-6098
                 URL: https://issues.apache.org/jira/browse/THRIFT-6098
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Library
    Affects Versions: 0.24.0
            Reporter: Dmytro Shteflyuk
            Assignee: Dmytro Shteflyuk


h2. Background

{{Thrift::SSLSocket}} currently passes its optional 
{{OpenSSL::SSL::SSLContext}} to OpenSSL without establishing consistent 
client-side peer-verification defaults. Consequently, the resulting behavior 
depends on whether and how the caller configured the supplied context.

This differs from {{Thrift::HTTPClientTransport}}, which already enables peer 
verification by default.

h2. Proposed behavior

For the Ruby library in 0.25.0, {{Thrift::SSLSocket}} should:

* verify the peer certificate by default;
* apply the same default when no SSL context is supplied or when the caller 
supplies a blank {{OpenSSL::SSL::SSLContext}};
* preserve a caller-provided CA file, CA directory, or certificate store;
* use the system certificate store when the context has no configured trust 
source;
* continue checking the certificate identity against {{server_hostname}}, or 
the connection host when no separate server hostname is supplied; and
* provide an explicit {{verify_peer: false}} option for applications that 
intentionally disable peer identity checks.

h2. Compatibility

This is an intentional behavior change for the Ruby library in 0.25.0.

Applications that intentionally connect without peer identity checks must 
update their {{Thrift::SSLSocket}} construction to pass {{verify_peer: false}} 
explicitly.

Applications that provide their own CA file, CA directory, or certificate store 
should continue using those configured trust sources without modification.

h2. Scope

This change is limited to the Ruby {{Thrift::SSLSocket}} transport.

{{Thrift::HTTPClientTransport}} already verifies HTTPS peers by default and 
does not require a behavior change. {{Thrift::RackApplication}} is also outside 
the scope because TLS negotiation is handled by the Rack server or reverse 
proxy before the Rack application receives a request.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to