I don’t use Fedora and track its versions, but assuming those are recent
RedHat including Fedora recently enabled ECC in its openssl packages after years of excluding it over concerns about Certicom’s patent. That increases the number of cipher suites in the Client Hello message and also adds two extensions (although fairly small for RH) which makes the Hello message bigger, and some servers are known to hang or otherwise fail when the Hello message is bigger than used to be “normal” a decade ago. Apparently api.tab.com.au:443 is such; tested with s_client > 255 hangs. (In a 404 it claims to be “WebLogic Server”, which I don’t know about.) I also observe this server does not implement 5746 (secure renegotiation) and will negotiate only TLSv1(.0) and 4 akRSA suites (RC4, 3DES, both AES) suggesting it is rather old. If you can’t get the server operator(s) to fix their server, you need to get openssl as used by perl to send a shorter ClientHello. The most straightforward way is to reduce the set of suites offered, especially since the server implements only 4. According to perldoc for the best perl I have (5.6.1 ActivePerl for Windows) but not tested, LWP::UserAgent can take a hash ssl_opts which apparently are passed (eventually) to openssl. Just making SSL_cipher_list DEFAULT:!ECDH should reduce the cipher list enough, although you might want even more restrictive settings for other reasons, like in general you should always prohibit “export” and “LOW” ciphers which have been broken for years. Alternatively it looks like you can set SSL_version to exclude TLSv12 or just force TLSv1; that excludes a bunch of ciphers and also the sigalgs extension, which should make Hello short enough. From: owner-openssl-us...@openssl.org [mailto:owner-openssl-us...@openssl.org] On Behalf Of Peter Abbott Sent: Thursday, December 19, 2013 17:29 To: openssl-users@openssl.org Subject: *** Spam *** Upgrade Breakage of Perl Script Hi, I have a simple perl script which supplies a username and account password to a server. The server in turn returns a password token for further operations. The script does not specifically use openssl but the perl modules LWP::UserAgent and or HTTP::Request must do. The script worked perfectly up to openssl version 1.0.1e-4.fc19.x86_64. Further upgrades to 1.0.1e-28.fc19 and 1.0.1e30.fc19 just hang somewhere at the handshake stage. I am only a novice and have a limited understanding of what is going on. Part of the script is as follows: #!/usr/bin/perl -w use strict; use LWP::UserAgent; use HTTP::Request; my $message = '<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.thirdparty.api.neo.tabcorp.com.au/"> <soapenv:Header/> <soapenv:Body> <ser:authenticateAccount> <apiMeta> <deviceId>1000011</deviceId> <jurisdictionId>2</jurisdictionId> <requestChannel>1</requestChannel> <usernamePasswordToken></usernamePasswordToken> </apiMeta> <authRequest> <accountId>xxxxxx</accountId> <accountPassword>yyyyyyyy</accountPassword> </authRequest> </ser:authenticateAccount> </soapenv:Body> </soapenv:Envelope>'; my $keyn; my $userAgent = LWP::UserAgent->new(); my $request = HTTP::Request->new(POST => 'https://api.tab.com.au/tabapi/services/thirdPartyAuthenticate'); $request->header(SOAPAction => '"http://service.thirdparty.api.neo.tabcorp.com.au/"'); $request->content($message); $request->content_type("text/xml; charset=utf-8"); my $response = $userAgent->request($request); if($response->code == 200) { print $response->as_string; } else { print "zs" } Can anyone shed some light on what is happening here or what I can do to remedy the problem? Thanks, Peter.