diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl
index a901077469..228f611758 100644
--- a/src/test/ssl/t/001_ssltests.pl
+++ b/src/test/ssl/t/001_ssltests.pl
@@ -3,6 +3,7 @@
 
 use strict;
 use warnings;
+use Config qw ( %Config );
 use PostgresNode;
 use TestLib;
 use Test::More;
@@ -489,8 +490,18 @@ TODO:
 my $serialno = `openssl x509 -serial -noout -in ssl/client.crt`;
 if ($? == 0)
 {
-	$serialno =~ s/^serial=//;
-	$serialno = hex($serialno); # OpenSSL prints serial numbers in hexadecimal
+	# OpenSSL prints serial numbers in hexadecimal and converting the serial
+	# from hex requires a 64-bit capable Perl. On 32-bit fall back to checking
+	# for it being a number like how we do when grabbing the serial fails.
+	if ($Config{ivsize} == 8)
+	{
+		$serialno =~ s/^serial=//;
+		$serialno = hex($serialno);
+	}
+	else
+	{
+		$serialno = '\d+';
+	}
 }
 else
 {
