Hide Forgot
Description of problem: When writing/using a perl script that wants to use SSL via perl-IO-Socket-SSL I am required to point the library at the default global certificate store. I shouldn't have to do that as a default behavioura. Version-Release number of selected component (if applicable): perl-IO-Socket-SSL-1.94-3.el7.noarch How reproducible: 100% Steps to Reproduce: 1. Write a perl script to make an SSL connection but don't set SSL parameters Actual results: connect failed: Unable to start TLS: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed Expected results: Should get a successful connection Additional info: In my script, where I am using perl-Mail-IMAPClient as a consumer of perl-IO-Socket-SSL in order to avoid the nasty error above I have to include SL_ca_file => '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem' Given that that is just pointing at the existing global default certificate store, I really ought not need to do this. While I am at it, I would also argue that SSL_verify_mode => SSL_VERIFY_PEER be default forcing one to set it otherwise if one wants to ignore certificate verification such as one has to do with other tools like curl's -k argument, etc.
You complain about this warning you get if you do not set the values explicitly: ******************************************************************* Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER together with SSL_ca_file|SSL_ca_path for verification. If you really don't want to verify the certificate and keep the connection open to Man-In-The-Middle attacks please set SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application. ******************************************************************* This is a documented feature of IO-Socket-SSL-1.94 that was the latest current when Red Hat Enterprise Linux version 7 was created. If you request changing the default behavior, please contact Red Hat support to help you with evaluating and escalating your issue properly.
I'm not saying that it's not the default behaviour upstream. What I am saying is that Red Hat's engineering and market focus means that it can do better than what is upstream. Upstream have no idea where the certificate store is for a given installation or who their users are. Red Hat does, on both counts. Red Hat's engineering provide systems with a central/global certificate store and Red Hat knows it has enterprise users who are interested in security. Both of those, IMHO, mean that Red Hat can adjust this default behaviour to provide an overall better integrated experience.
Default CA path is not the issue (you can use Mozilla::CA::SSL_ca_file from perl-Mozilla-CA that knows the correct location). The issue is enabling verification by default. This could break working systems of those who did not import CA certificate into their system. If you wish this change to be implemented please contact Red Hat support.
Created attachment 1229520 [details] Support for defaulting to system-wide CA store This patch implements defaulting to system-wide CA store if SSL_ca_file option is not pasted with undef value.
How to test: (1) Check an IO::Socket::SSL connection uses a system-wide CA certificate store by default by executing: $ perl -MIO::Socket::SSL -e 'IO::Socket::SSL->new(PeerHost=>q{bugzilla.redhat.com}, PeerPort=>443, SSL_verify_mode=>SSL_VERIFY_PEER) or die qq{error $!, $SSL_ERROR\n}' Before: An error is reported like this: error , IO::Socket::IP configuration failed SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed After: No error is reported. (2) Check a connection to a server with uknown authority fails. (3) You can also check that running the code from a directory that has certs/my-ca.pem file will use that file by default instead of the system-wide store. (4) You can also check that passing SSL_ca_file=>undef arguments to the IO::Socket::SSL->new() will prevent from using the system-wide store.
I'm seeing the same issue and this patch works for me. Any chance this will make it into an update soon?
There is no chance if customer does not reach out Red Hat Support.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHEA-2018:0688