about summary refs log tree commit
path: root/lib/Net/FTP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/FTP.pm')
-rw-r--r--lib/Net/FTP.pm8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Net/FTP.pm b/lib/Net/FTP.pm
index e77178a..ea0d7ae 100644
--- a/lib/Net/FTP.pm
+++ b/lib/Net/FTP.pm
@@ -103,7 +103,8 @@ sub new {
     %tlsargs = (
       SSL_verifycn_scheme => 'ftp',
       SSL_verifycn_name => $hostname,
-      SSL_hostname => $hostname,
+      # use SNI if supported by IO::Socket::SSL
+      $pkg->can_client_sni ? (SSL_hostname => $hostname):(),
       # reuse SSL session of control connection in data connections
       SSL_session_cache => Net::FTP::_SSL_SingleSessionCache->new,
     );
@@ -1039,7 +1040,10 @@ sub _dataconn {
         $ftp->is_SSL ? (
           SSL_reuse_ctx => $ftp,
           SSL_verifycn_name => ${*$ftp}{net_ftp_tlsargs}{SSL_verifycn_name},
-          SSL_hostname => ${*$ftp}{net_ftp_tlsargs}{SSL_hostname},
+          # This will cause the use of SNI if supported by IO::Socket::SSL.
+          $ftp->can_client_sni ? (
+            SSL_hostname  => ${*$ftp}{net_ftp_tlsargs}{SSL_hostname}
+          ):(),
         ) :( %{${*$ftp}{net_ftp_tlsargs}} ),
       ):(),
     ) or return;