Bug 1325407 - Backport patches to allow Net::SSLeay to support TLSv1.1, TLSv1.2
Summary: Backport patches to allow Net::SSLeay to support TLSv1.1, TLSv1.2
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: perl-Net-SSLeay
Version: 6.7
Hardware: Unspecified
OS: Unspecified
Target Milestone: rc
: ---
Assignee: Petr Pisar
QA Contact: BaseOS QE Security Team
Lenka Špačková
Depends On:
Blocks: 1269194 1331037 1359263 1375183
TreeView+ depends on / blocked
Reported: 2016-04-08 18:16 UTC by Brian Hinz
Modified: 2020-12-11 12:08 UTC (History)
8 users (show)

Fixed In Version: perl-Net-SSLeay-1.35-11.el6
Doc Type: Release Note
Doc Text:
The *Net:SSLeay* Perl module now supports restricting of TLS version The *Net:SSLeay* Perl module has been updated to support explicit specification of the TLS protocol version, which can be used for improving security. To restrict TLS version to 1.1 or 1.2, set the `Net::SSLeay::ssl_version` variable to `11` or `12`, respectively.
Clone Of:
: 1335028 1375183 (view as bug list)
Last Closed: 2017-05-24 14:37:30 UTC
Target Upstream Version:

Attachments (Terms of Use)
Proposed patches (2.08 KB, patch)
2016-04-18 13:12 UTC, Brian Hinz
no flags Details | Diff
Proposed patches (2/2) (1.09 KB, patch)
2016-04-18 13:14 UTC, Brian Hinz
no flags Details | Diff
Proposed patches (additional patch against IO::Socket::SSL) (1.15 KB, patch)
2016-04-18 13:17 UTC, Brian Hinz
no flags Details | Diff
Net-SSLeay 1st part (context methods) (1.52 KB, patch)
2016-04-25 13:10 UTC, Petr Pisar
no flags Details | Diff
Net-SSLeay 2nd part (Net::SSLeay::ssl_version values) (1.93 KB, patch)
2016-04-25 13:11 UTC, Petr Pisar
no flags Details | Diff

Description Brian Hinz 2016-04-08 18:16:35 UTC
Description of problem:

perl-Net-SSLeay v1.35 that ships as a part of RHEL 6 does not support explicitly specifying protocol versions TLSv1.1 or TLSv1.2 via the SSL_version parameter.  However, the following two upstream patches would be trivial to backport and would enable this functionality:


Note that it's possible to get a TLSv1.2 context with the current version (by specifying TLSv1.*, which causes the case statement in the constructor to fall through and return a default context, which just happens to be TLSv1.2).  It's not possible to get a TLSv1.1, or even enforce that the context is using TLSv1.2.

Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:

N/A - functionality isn't there.

Actual results:

Expected results:

Additional info:

IO::Socket::SSL should also be patched to take advantage of this change. Although there isn't a direct upstream patch that would apply cleanly, it also a simple change.  If this request gets a favorable response, I'll file a follow-up enhancement request for perl-IO-Socket-SSL and attach a patch.

Comment 2 Petr Pisar 2016-04-11 08:42:58 UTC
Please contact Red Hat support to evaluate your request properly.

Comment 4 Brian Hinz 2016-04-18 13:12:20 UTC
Created attachment 1148209 [details]
Proposed patches

Comment 5 Brian Hinz 2016-04-18 13:14:24 UTC
Created attachment 1148210 [details]
Proposed patches (2/2)

Comment 6 Brian Hinz 2016-04-18 13:17:04 UTC
Created attachment 1148211 [details]
Proposed patches (additional patch against IO::Socket::SSL)

This patch would be applied to perl-IO-Socket-SSL, just adding it here for reference.  Will continue to work 1325407 through Red Hat support and based on that outcome, will open a second ticket for perl-IO-Socket-SSL.

Comment 13 Petr Pisar 2016-04-25 13:10:08 UTC
Created attachment 1150468 [details]
Net-SSLeay 1st part (context methods)

Comment 14 Petr Pisar 2016-04-25 13:11:17 UTC
Created attachment 1150469 [details]
Net-SSLeay 2nd part (Net::SSLeay::ssl_version values)

Comment 15 Petr Pisar 2016-04-25 13:55:46 UTC
How to test:

(1) Start a TLS server that does not support TLS 1.2, e.g.:
$ openssl s_server -tls1 -key key -cert cert -www
(2) Run a Net::SSLey Perl program that enforces TLS 1.2 by setting $Net::SSLeay::ssl_version=12, e.g.:
perl -MNet::SSLeay -e '$Net::SSLeay::ssl_version=12; my ($response, $error) = Net::SSLeay::sslcat(q{localhost}, 4433, q{GET /}); if ($error) { die $error }; print $response'

Before: The connection succeeds because OpenSSL in the client will fall back to TLS 1.0. With the s_server command, the client will print report this server's response:

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
    Protocol  : TLSv1

After: The connection fails, the client reports this error:

SSL_connect 10092: 1 - error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

(3) Repeat the test for TLS 1.1 by setting $Net::SSLeay::ssl_version=11.

Note You need to log in before you can comment on or make changes to this bug.