Skip to content

PERL on MacOS stutters with OpenSSL and private CA certificates (per NIT test suite) #3404

@jimklimov

Description

@jimklimov

May be related to a known issue on the platform (old OpenSSL, patched by Apple and abandoned to misbehave as it will): https://hynek.me/articles/apple-openssl-verification-surprises/

First hit in PR #3402 and the easiset reaction is to neuter the test in CI, but a better solution is needed.

Traced run:

:; NUT_DEBUG_LEVEL_UPSD=6 NIT_CASE=perl NIT_DEBUG_PERL=true  tests/NIT/nit.sh

...
DEBUG: STARTTLS args: SSL_verify_mode=>SSL_VERIFY_PEER Other args: [14] SSL_key_file=>undef USESSL=>1 USERNAME=>dummy-admin SSL_ca_path=>/Users/abuild/nut/tmp/etc/cert/rootca NAME=>dummy SSL_cert_file=>undef DEBUG=>1 HOST=>127.0.0.1 PASSWORD=>P@ssW0rdAdm SSL_ca_file=>undef FORCESSL=>1 CERTVERIFY=>1 PORT=>35016 SSL_key_pass=>undef

...
>> /Users/abuild/nut/scripts/perl/UPS/Nut.pm:211:     ) or do {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1595:     my ($class,$socket) = (shift,shift);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1596:     return $class->_internal_error("Not a socket",9) if ! ref($socket);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1597:     my $arg_hash = @_ == 1 ? $_[0] : {@_};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1598:     my %to = exists $arg_hash->{Timeout} ? ( Timeout => delete $arg_hash->{Timeout} ) :();
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1599:     my $original_class = ref($socket);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1600:     if ( ! $original_class ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1605:     my $original_fileno = (UNIVERSAL::can($socket, "fileno"))
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Handle.pm:401:     @_ == 1 or croak 'usage: $io->fileno()';
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Handle.pm:402:     fileno($_[0]);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1607:     return $class->_internal_error("Socket has no fileno",9)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1610:     bless $socket, $class;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1611:     $socket->configure_SSL($arg_hash) or bless($socket, $original_class) && return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:712:     my ($self, $arg_hash) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:714:     $arg_hash->{Proto} ||= 'tcp';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:715:     my $is_server = $arg_hash->{SSL_server};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:716:     if ( ! defined $is_server ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:717:       $is_server = $arg_hash->{SSL_server} = $arg_hash->{Listen} || 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:721:     $FILTER_SSL_ARGS->($is_server,$arg_hash) if $FILTER_SSL_ARGS;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:723:     delete @{*$self}{@all_my_keys};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:723:     delete @{*$self}{@all_my_keys};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:724:     ${*$self}{_SSL_opened} = $is_server;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:724:     ${*$self}{_SSL_opened} = $is_server;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:725:     ${*$self}{_SSL_arguments} = $arg_hash;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:725:     ${*$self}{_SSL_arguments} = $arg_hash;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:728:     ${*$self}{'_SSL_ctx'} = IO::Socket::SSL::SSL_Context->new($arg_hash)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2312:     my $class = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2314:     my $arg_hash = (ref($_[0]) eq 'HASH') ? $_[0] : {@_};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2316:     my $is_server = $arg_hash->{SSL_server};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2317:     my %defaults = $is_server
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2320:     if ( $defaults{SSL_reuse_ctx} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2325:     %$arg_hash = ( %defaults, %$arg_hash ) if %defaults;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2327:     if (my $ctx = $arg_hash->{'SSL_reuse_ctx'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2340:     if ( ! $is_server && ! defined $arg_hash->{SSL_use_cert}
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2341:      && ( grep { $arg_hash->{$_} } qw(SSL_cert SSL_cert_file))
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2341:      && ( grep { $arg_hash->{$_} } qw(SSL_cert SSL_cert_file))
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2348:     if ( $arg_hash->{SSL_ca} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2353:     } elsif ( $arg_hash->{SSL_ca_file} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2358:     $arg_hash->{SSL_use_cert} = $is_server if ! defined $arg_hash->{SSL_use_cert};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2362:     defined($arg_hash->{$_}) or delete($arg_hash->{$_}) for(keys %$arg_hash);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2366:     for (qw( SSL_cert SSL_cert_file SSL_key SSL_key_file
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2370:          and $arg_hash->{$_} eq '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2372:     for(qw(SSL_cert_file SSL_key_file)) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2373:       defined( my $file = $arg_hash->{$_} ) or next;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2373:       defined( my $file = $arg_hash->{$_} ) or next;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2379:     my $verify_mode = $arg_hash->{SSL_verify_mode} || 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2380:     if ( $verify_mode != $Net_SSLeay_VERIFY_NONE) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2381:      for (qw(SSL_ca_file SSL_ca_path)) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2382:          $CHECK_SSL_PATH->($_ => $arg_hash->{$_} || next);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2382:          $CHECK_SSL_PATH->($_ => $arg_hash->{$_} || next);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:512:     my %args = (@_ == 1) ? ('',@_) : @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:513:     for my $type (keys %args) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:514:       my $path = $args{$type};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:515:       if (!$type) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:521:       next if ref($path) eq 'SCALAR' && ! $$path;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:522:       if ($type eq 'SSL_ca_file') {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:526:           $path = [ split($OPENSSL_LIST_SEPARATOR,$path) ] if !ref($path);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:527:           my @err;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:528:           for my $d (ref($path) ? @$path : $path) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:529:               if (! -d $d) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:534:                   @err = ();
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:536:               }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:538:           die "@err" if @err;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:541:     return %args;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2389:     my $self = bless {},$class;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2391:     my $vcn_scheme = delete $arg_hash->{SSL_verifycn_scheme};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2392:     my $vcn_publicsuffix = delete $arg_hash->{SSL_verifycn_publicsuffix};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2393:     if ( ! $is_server and $verify_mode & 0x01 and
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2397:      my $verify_name;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2398:      $self->{verify_name_ref} = \$verify_name;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2400:      my $vcb = $arg_hash->{SSL_verify_callback};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2433:      };
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2436:     if ($is_server) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2444:     my $ssl_op = $DEFAULT_SSL_OP;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2446:     my $ver;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2447:     for (split(/\s*:\s*/,$arg_hash->{SSL_version})) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2448:      m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[123])?))$}i
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2450:      my $not = $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2451:      ( my $v = lc($2||$3) ) =~s{^(...)}{\U$1};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2452:      if ( $not ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2455:          croak("cannot set multiple SSL protocols in SSL_version")
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2457:          $ver = $v;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2458:          $ver =~s{/}{}; # interpret SSLv2/3 as SSLv23
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2459:          $ver =~s{(TLSv1)(\d)}{$1\_$2}; # TLSv1_1
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2448:      m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[123])?))$}i
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2450:      my $not = $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2451:      ( my $v = lc($2||$3) ) =~s{^(...)}{\U$1};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2452:      if ( $not ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2453:          $ssl_op |= $SSL_OP_NO{$v};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2448:      m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[123])?))$}i
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2450:      my $not = $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2451:      ( my $v = lc($2||$3) ) =~s{^(...)}{\U$1};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2452:      if ( $not ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2453:          $ssl_op |= $SSL_OP_NO{$v};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2463:     my $ctx_new_sub =
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2476:     my %ctx;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2477:     if ($is_server) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2491:     $ctx{''} = $arg_hash if ! %ctx;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2493:     for my $host (sort keys %ctx) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2494:      my $arg_hash = delete $ctx{$host};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2495:      my $ctx;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2496:      if ($host =~m{^([^%]*)%}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2510:      $ctx = $ctx_new_sub->() or return
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2512:      $CTX_CREATED_IN_THIS_THREAD{$ctx} = 1 if $use_threads;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2513:      $ctx{$host} = $ctx; # replace value in %ctx with real context
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2516:      $ssl_op |= 0x00400000 if $arg_hash->{SSL_honor_cipher_order};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2518:      if ($ver eq 'SSLv23' && !($ssl_op & $SSL_OP_NO{SSLv3})) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2522:          Net::SSLeay::CTX_clear_options($ctx,$SSL_OP_NO{SSLv3});
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:367:       my ($ctx,$opt) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:369:       Net::SSLeay::CTX_ctrl($ctx,77,$opt,0);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2525:      Net::SSLeay::CTX_set_options($ctx,$ssl_op);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2528:      $check_partial_chain && $check_partial_chain->($ctx);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:132:           my $ctx = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:133:           my $param = Net::SSLeay::CTX_get0_param($ctx);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:134:           Net::SSLeay::X509_VERIFY_PARAM_set_flags($param, $c);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2534:      if($arg_hash->{SSL_server} and my $id =
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2547:          ($arg_hash->{SSL_mode_release_buffers} ? $ssl_mode_release_buffers : 0)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2550:      if ( my $proto_list = $arg_hash->{SSL_npn_protocols} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2563:      if ( my $proto_list = $arg_hash->{SSL_alpn_protocols} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2573:      if ($arg_hash->{SSL_ticket_keycb}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2582:      if ( $arg_hash->{SSL_ca}
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2585:          my $file = $arg_hash->{SSL_ca_file};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2586:          $file = undef if ref($file) eq 'SCALAR' && ! $$file;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2587:          my $dir = $arg_hash->{SSL_ca_path};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2588:          $dir = undef if ref($dir) eq 'SCALAR' && ! $$dir;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2589:          if ( $arg_hash->{SSL_ca} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2597:          $dir = join($OPENSSL_LIST_SEPARATOR,@$dir) if ref($dir);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2598:          if ( $file || $dir and ! Net::SSLeay::CTX_load_verify_locations(
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2616:      if ($is_server && ($verify_mode & $Net_SSLeay_VERIFY_PEER)) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2633:      my $X509_STORE_flags = $DEFAULT_X509_STORE_flags;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2634:      if ($arg_hash->{'SSL_check_crl'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2650:          Net::SSLeay::CTX_get_cert_store($ctx),
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2655:          if $arg_hash->{SSL_passwd_cb};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2657:      just_configure_certs:
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2659:      if ( my $x509 = $arg_hash->{SSL_cert} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2723:      if (!$havecert || $havekey) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2742:      Net::SSLeay::CTX_set_post_handshake_auth($ctx,1)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2746:     if ($arg_hash->{SSL_server}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2770:     if ( my $curve = $arg_hash->{SSL_ecdh_curve} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2817:     my $verify_cb = $arg_hash->{SSL_verify_callback};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2818:     my @accept_fp;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2819:     if ( my $fp = $arg_hash->{SSL_fingerprint} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2834:     my $verify_fingerprint = @accept_fp && do {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2868:     };
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2870:     if ( $^O eq 'darwin' ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2873:      my $vcb = $verify_callback;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2881:      };
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2884:      for (values %ctx);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2886:     my $staple_callback = $arg_hash->{SSL_ocsp_staple_callback};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2887:     if ( !$is_server && $can_ocsp_staple && ! $verify_fingerprint) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2888:      $self->{ocsp_cache} = $arg_hash->{SSL_ocsp_cache};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2966:      };
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2967:      Net::SSLeay::CTX_set_tlsext_status_cb($_,$status_cb) for (values %ctx);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2970:     if ( my $cl = $arg_hash->{SSL_cipher_list} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2971:      for (keys %ctx) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2974:              : $cl
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2980:     my $ctx = $ctx{''} || (values %ctx)[0];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2981:     if (keys(%ctx) > 1 || ! exists $ctx{''}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3000:     if ( my $cb = $arg_hash->{SSL_create_ctx_callback} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3004:     $self->{context} = $ctx;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3005:     $self->{verify_mode} = $arg_hash->{SSL_verify_mode};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3008:      $self->{verify_mode} ? IO::Socket::SSL::SSL_OCSP_TRY_STAPLE() :
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3010:     $DEBUG>=3 && DEBUG( "new ctx $ctx" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:3010: new ctx 105553163830144
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3012:     if ( my $cache = $arg_hash->{SSL_session_cache} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3020:     if ($self->{session_cache} and %sess_cb) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:3046:     return $self;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:728:     ${*$self}{'_SSL_ctx'} = IO::Socket::SSL::SSL_Context->new($arg_hash)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:731:     return $self;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1613:     ${*$socket}{'_SSL_fileno'} = $original_fileno;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1613:     ${*$socket}{'_SSL_fileno'} = $original_fileno;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1614:     ${*$socket}{'_SSL_ioclass_upgraded'} = $original_class
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1614:     ${*$socket}{'_SSL_ioclass_upgraded'} = $original_class
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1617:     my $start_handshake = $arg_hash->{SSL_startHandshake};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1618:     if ( ! defined($start_handshake) || $start_handshake ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1620:      $DEBUG>=2 && DEBUG( "start handshake" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:1620: start handshake
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1621:      my $was_blocking = $socket->blocking(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1176:      my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1571:     my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1572:     return ${*$self}{'_SSL_object'} ||
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1572:     return ${*$self}{'_SSL_object'} ||
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2072:     my ($self, $error, $severity) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2073:     $error = dualvar( -1, $error );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2074:     $self = $CURRENT_SSL_OBJECT if !ref($self) && $CURRENT_SSL_OBJECT;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2075:     if (ref($self)) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2085:      $SSL_ERROR = $error;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2086:      $DEBUG && DEBUG("global error: $error");
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:482:       (undef,$file,$line) = caller(2) if $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2088:     return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1178:      return $self->SUPER::blocking(@_);
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:168:     my $sock = shift;
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:170:     return $sock->SUPER::blocking(@_)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1623:          ? $socket->accept_SSL(%to)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1622:      my $result = ${*$socket}{'_SSL_arguments'}{SSL_server}
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:780:     my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:781:     my $args = @_>1 ? {@_}: $_[0]||{};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:782:     return $self if ${*$self}{'_SSL_opened'};  # already connected
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:782:     return $self if ${*$self}{'_SSL_opened'};  # already connected
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:784:     my ($ssl,$ctx);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:785:     if ( ! ${*$self}{'_SSL_opening'} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:785:     if ( ! ${*$self}{'_SSL_opening'} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:787:       $DEBUG>=2 && DEBUG('ssl handshake not started' );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:787: ssl handshake not started
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:788:       ${*$self}{'_SSL_opening'} = 1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:788:       ${*$self}{'_SSL_opening'} = 1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:789:       my $arg_hash = ${*$self}{'_SSL_arguments'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:789:       my $arg_hash = ${*$self}{'_SSL_arguments'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:791:       my $fileno = ${*$self}{'_SSL_fileno'} = fileno($self);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:791:       my $fileno = ${*$self}{'_SSL_fileno'} = fileno($self);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:792:       return $self->_internal_error("Socket has no fileno",9)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:795:       $ctx = ${*$self}{'_SSL_ctx'};  # Reference to real context
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:795:       $ctx = ${*$self}{'_SSL_ctx'};  # Reference to real context
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:797:           || return $self->error("SSL structure creation failed");
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:796:       $ssl = ${*$self}{'_SSL_object'} = Net::SSLeay::new($ctx->{context})
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:798:       $CREATED_IN_THIS_THREAD{$ssl} = 1 if $use_threads;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:799:       $SSL_OBJECT{$ssl} = [$self,0];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:800:       weaken($SSL_OBJECT{$ssl}[0]);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:802:       if ($ctx->{session_cache}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:811:       Net::SSLeay::set_fd($ssl, $fileno)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:814:       if ( $can_client_sni ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:815:           my $host;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:816:           if ( exists $arg_hash->{SSL_hostname} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:820:           } elsif ( $host = $arg_hash->{PeerAddr} || $arg_hash->{PeerHost} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:828:           if ($host) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:829:               $DEBUG>=2 && DEBUG("using SNI with hostname $host");
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:829: using SNI with hostname 127.0.0.1
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:830:               Net::SSLeay::ctrl($ssl,55,0,$host);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:841:       $arg_hash->{PeerAddr} || $arg_hash->{PeerHost} || $self->_update_peer;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1004:     my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1005:     my $arg_hash = ${*$self}{'_SSL_arguments'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1005:     my $arg_hash = ${*$self}{'_SSL_arguments'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1006:     eval {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1007:      my $sockaddr = getpeername( $self );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1008:      my $af = sockaddr_family($sockaddr);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1009:      if( CAN_IPV6 && $af == AF_INET6 ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1015:          my ($port,$addr) = sockaddr_in( $sockaddr);
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/Socket.pm:841:     if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/Socket.pm:847:  croak "usage:   (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/Socket.pm:848:         unpack_sockaddr_in(@_);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1016:          $arg_hash->{PeerPort} = $port;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1017:          $arg_hash->{PeerAddr} = inet_ntoa( $addr );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:842:       if ( $ctx->{verify_name_ref} ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:845:               || $arg_hash->{SSL_hostname};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:846:           if ( ! defined $host ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:851:           ${$ctx->{verify_name_ref}} = $host;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:851:           ${$ctx->{verify_name_ref}} = $host;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:854:       my $ocsp = $ctx->{ocsp_mode};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:855:       if ( $ocsp & SSL_OCSP_NO_STAPLE ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:861:           ${*$self}{_SSL_ocsp_verify} = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:861:           ${*$self}{_SSL_ocsp_verify} = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:862:           Net::SSLeay::set_tlsext_status_type($ssl,
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:426:     my $constname;
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:427:     ($constname = $AUTOLOAD) =~ s/.*:://;
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:428:     my $val = constant($constname);
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:429:     if ($! != 0) {
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:438:     eval "sub $AUTOLOAD { $val }";
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:439:     goto &$AUTOLOAD;
>> (eval 34)[/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:438]:1: sub Net::SSLeay::TLSEXT_STATUSTYPE_ocsp { 1 }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:864:           $DEBUG>=2 && DEBUG("request OCSP stapling");
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:864: request OCSP stapling
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:867:       if ($ctx->{session_cache} and my $session =
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:874:     $ssl ||= ${*$self}{'_SSL_object'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:876:     $SSL_ERROR = $! = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:879:       : ${*$self}{io_socket_timeout}; # from IO::Socket
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:879:       : ${*$self}{io_socket_timeout}; # from IO::Socket
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:880:     if ( defined($timeout) && $timeout>0 && $self->blocking(0) ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:886:       $timeout = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:887:       $auto_retry && $auto_retry->($ssl,$self->blocking);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1176:      my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1178:      return $self->SUPER::blocking(@_);
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:168:     my $sock = shift;
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:170:     return $sock->SUPER::blocking(@_)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:153:           my ($ssl,$on) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:154:           if ($on) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:155:               Net::SSLeay::set_mode($ssl, $mode_auto_retry);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:890:     my $start = defined($timeout) && time();
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:892:       $SSL_ERROR = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:892:       $SSL_ERROR = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:893:       $CURRENT_SSL_OBJECT = $self;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:894:       $DEBUG>=3 && DEBUG("call Net::SSLeay::connect" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:895:       my $rv = Net::SSLeay::connect($ssl);
  10.511724     [D4:8130:upsd] net_starttls: SSL_accept WANT_READ, retry 2/250
  10.520387     [D4:8130:upsd] net_starttls: SSL_accept WANT_READ, retry 3/250
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2875:          my $rv = $vcb ? &$vcb : $_[0];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2853:      my ($ok, $ctx_store) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2854:      my ($certname,$cert,$error,$depth);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2855:      if ($ctx_store) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2856:          $cert  = Net::SSLeay::X509_STORE_CTX_get_current_cert($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2857:          $error = Net::SSLeay::X509_STORE_CTX_get_error($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2858:          $depth = Net::SSLeay::X509_STORE_CTX_get_error_depth($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2859:          $certname =
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2862:          $error &&= Net::SSLeay::ERR_error_string($error);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2864:      $DEBUG>=3 && DEBUG( "ok=$ok [$depth] $certname" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:2864: ok=0 [0] /CN=NUT Mock Root CA/OU=Test/O=NIT/ST=StateOfChaos/C=US/CN=NIT data server/OU=Test/O=NIT/ST=StateOfChaos/C=US
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2865:      $ok = $verify_cb->($ok,$ctx_store,$certname,$error,$cert,$depth) if $verify_cb;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2402:          my ($ok,$ctx_store,$certname,$error,$cert,$depth) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2403:          $ok = $vcb->($ok,$ctx_store,$certname,$error,$cert,$depth) if $vcb;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2404:          $ok or return 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2866:      $ok = $verify_fingerprint->($ok,$cert,$depth) if $verify_fingerprint && $cert;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2867:      return $ok;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2876:          if ( $rv != 1 ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2878:              Net::SSLeay::X509_STORE_CTX_set_error($_[1], 50);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2880:          return $rv;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:896:       $CURRENT_SSL_OBJECT = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:897:       $DEBUG>=3 && DEBUG("done Net::SSLeay::connect -> $rv" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
  10.521519     net_starttls: SSL_accept failed (SSL_ERROR 1): Undefined error: 0
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
  10.521526     [D1:8130:upsd] ssl_error() ret=-1 SSL_ERROR 1
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
  10.521533     [D1:8130:upsd] ssl_debug: error:0A000410:SSL routines::ssl/tls alert handshake failure
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> -1
  10.521541     [D4:8130:upsd] mainloop: adding FD handler #0 for DRIVER (1/1) [dummy, FD 7]
  10.521545     [D4:8130:upsd] mainloop: adding FD handler #1 for DRIVER (2/2) [UPS1, FD 8]
  10.521549     [D4:8130:upsd] mainloop: adding FD handler #2 for DRIVER (3/3) [UPS2, FD 9]
  10.521553     [D4:8130:upsd] mainloop: adding FD handler #3 for CLIENT (1/1) [127.0.0.1 => (null), FD 10]
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:898:       if ( $rv < 0 ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:899:           if ( my $err = $self->_skip_rw_error( $ssl,$rv )) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:736:     my ($self,$ssl,$rv) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:737:     my $err = Net::SSLeay::get_error($ssl,$rv);
  10.521557     [D4:8130:upsd] mainloop: adding FD handler #4 for SERVER listener (1/1) [localhost:35016, FD 5]
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:738:     if ( $err == $Net_SSLeay_ERROR_WANT_READ) {
  10.521588     [D4:8130:upsd] mainloop: adding FD handler #5 for SERVER listener (2/2) [127.0.0.1:35016, FD 6]
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:743:       return $err;
  10.521592     [D5:8130:upsd] mainloop: skip invalid SERVER listener [::1:35016, FD -1]: socket not bound
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:900:               $self->error("SSL connect attempt failed");
  10.521597     [D2:8130:upsd] mainloop: polling 6 filedescriptors; some stats: considered 7 connections, wanted to actually poll 6 and was constrained by maxconn=256 and chunked by sysmaxconn=256
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2093:     my ($self, $error) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2094:     my @err;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2095:     while ( my $err = Net::SSLeay::ERR_get_error()) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2096:      push @err, Net::SSLeay::ERR_error_string($err);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2097:      $DEBUG>=2 && DEBUG( $error."\n".$self->get_ssleay_error());
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2055:     local $Net::SSLeay::trace;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2056:     return Net::SSLeay::print_errs('SSL error: ') || '';
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:459:     my ($msg) = @_;
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:460:     my ($count, $err, $errs, $e) = (0,0,'');
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:461:     while ($err = ERR_get_error()) {
>> /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level/Net/SSLeay.pm:467:     return $errs;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:482:       (undef,$file,$line) = caller(2) if $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:900: SSL connect attempt failed

>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2099:     $error .= ' '.join(' ',@err) if @err;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2100:     return $self->_internal_error($error,4) if $error;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2072:     my ($self, $error, $severity) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2073:     $error = dualvar( -1, $error );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2074:     $self = $CURRENT_SSL_OBJECT if !ref($self) && $CURRENT_SSL_OBJECT;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2075:     if (ref($self)) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2076:      my $oe = ${*$self}{_SSL_last_err};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2076:      my $oe = ${*$self}{_SSL_last_err};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2077:      if (!$oe || $oe->[1] <= $severity) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2078:          ${*$self}{_SSL_last_err} = [$error,$severity];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2078:          ${*$self}{_SSL_last_err} = [$error,$severity];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2079:          $SSL_ERROR = $error;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2080:          $DEBUG && DEBUG("local error: $error");
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:482:       (undef,$file,$line) = caller(2) if $1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:900: local error: SSL connect attempt failed error:14FFF086:SSL routines:(UNKNOWN)SSL_internal:certificate verify failed
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2088:     return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:901:               delete ${*$self}{'_SSL_opening'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:901:               delete ${*$self}{'_SSL_opening'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:902:               ${*$self}{'_SSL_opened'} = -1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:902:               ${*$self}{'_SSL_opened'} = -1;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:903:               $DEBUG>=1 && DEBUG( "fatal SSL error: $SSL_ERROR" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:903: fatal SSL error: SSL connect attempt failed error:14FFF086:SSL routines:(UNKNOWN)SSL_internal:certificate verify failed
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:904:               return $self->fatal_ssl_error();
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2035:     my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2036:     my $error_trap = ${*$self}{'_SSL_arguments'}->{'SSL_error_trap'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2036:     my $error_trap = ${*$self}{'_SSL_arguments'}->{'SSL_error_trap'};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2037:     $@ = $self->errstr;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2029:     my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2030:     my $oe = ref($self) && ${*$self}{_SSL_last_err};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2030:     my $oe = ref($self) && ${*$self}{_SSL_last_err};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2031:     return $oe ? $oe->[0] : $SSL_ERROR || '';
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2038:     if (defined $error_trap and ref($error_trap) eq 'CODE') {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2040:     } elsif ( ${*$self}{'_SSL_ioclass_upgraded'}
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2043:      $DEBUG>=3 && DEBUG('downgrading SSL only, not closing socket' );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:2043: downgrading SSL only, not closing socket
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2044:      $self->stop_SSL;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1459:     my $self = shift || return _invalid_object();
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1460:     my $stop_args = (ref($_[0]) eq 'HASH') ? $_[0] : {@_};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1461:     $stop_args->{SSL_no_shutdown} = 1 if ! ${*$self}{_SSL_opened};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1461:     $stop_args->{SSL_no_shutdown} = 1 if ! ${*$self}{_SSL_opened};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1463:     if (my $ssl = ${*$self}{'_SSL_object'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1463:     if (my $ssl = ${*$self}{'_SSL_object'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1464:      if (delete ${*$self}{'_SSL_opening'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1464:      if (delete ${*$self}{'_SSL_opening'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1467:          my $status = Net::SSLeay::get_shutdown($ssl);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1472:              ${*$self}{io_socket_timeout}; # from IO::Socket
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1176:      my $self = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1177:      { @_ && $auto_retry->($self->_get_ssl_object || last, @_); }
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1178:      return $self->SUPER::blocking(@_);
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:168:     my $sock = shift;
>> /System/Library/Perl/5.30/darwin-thread-multi-2level/IO/Socket.pm:170:     return $sock->SUPER::blocking(@_)
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1472:              ${*$self}{io_socket_timeout}; # from IO::Socket
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1473:          if ($timeout) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1478:          while (1) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1479:              if ( $status & SSL_SENT_SHUTDOWN and
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1486:              if ((${*$self}{'_SSL_opened'}||0) <= 0) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1486:              if ((${*$self}{'_SSL_opened'}||0) <= 0) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1489:                  last;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1521:          $self->blocking(1) if $timeout;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1526:      Net::SSLeay::free($ssl);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1527:      if (my $cert = delete ${*$self}{'_SSL_certificate'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1527:      if (my $cert = delete ${*$self}{'_SSL_certificate'}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1530:      delete ${*$self}{_SSL_object};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1530:      delete ${*$self}{_SSL_object};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1531:      ${*$self}{'_SSL_opened'} = 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1531:      ${*$self}{'_SSL_opened'} = 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1532:      delete $SSL_OBJECT{$ssl};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1533:      delete $CREATED_IN_THIS_THREAD{$ssl};
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:1534:      untie(*$self);

So somewhere here it decides ok=0 (failed) in the validation callback (vcb), and later two lines of checks do not override that; but it does see the certificate; less sure it accepts the ROOTCA path (directory) passed to it by the test suite, or relies only on system trust store:

DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:895:       my $rv = Net::SSLeay::connect($ssl);
  10.511724     [D4:8130:upsd] net_starttls: SSL_accept WANT_READ, retry 2/250
  10.520387     [D4:8130:upsd] net_starttls: SSL_accept WANT_READ, retry 3/250
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2875:          my $rv = $vcb ? &$vcb : $_[0];
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2853:      my ($ok, $ctx_store) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2854:      my ($certname,$cert,$error,$depth);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2855:      if ($ctx_store) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2856:          $cert  = Net::SSLeay::X509_STORE_CTX_get_current_cert($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2857:          $error = Net::SSLeay::X509_STORE_CTX_get_error($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2858:          $depth = Net::SSLeay::X509_STORE_CTX_get_error_depth($ctx_store);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2859:          $certname =
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2862:          $error &&= Net::SSLeay::ERR_error_string($error);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2864:      $DEBUG>=3 && DEBUG( "ok=$ok [$depth] $certname" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:2864: ok=0 [0] /CN=NUT Mock Root CA/OU=Test/O=NIT/ST=StateOfChaos/C=US/CN=NIT data server/OU=Test/O=NIT/ST=StateOfChaos/C=US
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2865:      $ok = $verify_cb->($ok,$ctx_store,$certname,$error,$cert,$depth) if $verify_cb;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2402:          my ($ok,$ctx_store,$certname,$error,$cert,$depth) = @_;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2403:          $ok = $vcb->($ok,$ctx_store,$certname,$error,$cert,$depth) if $vcb;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2404:          $ok or return 0;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2866:      $ok = $verify_fingerprint->($ok,$cert,$depth) if $verify_fingerprint && $cert;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2867:      return $ok;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2876:          if ( $rv != 1 ) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2878:              Net::SSLeay::X509_STORE_CTX_set_error($_[1], 50);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:2880:          return $rv;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:896:       $CURRENT_SSL_OBJECT = undef;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:897:       $DEBUG>=3 && DEBUG("done Net::SSLeay::connect -> $rv" );
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:479:     $DEBUG or return;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:480:     my (undef,$file,$line,$sub) = caller(1);
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:481:     if ($sub =~m{^IO::Socket::SSL::(?:error|(_internal_error))$}) {
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:484:       (undef,$file,$line) = caller;
  10.521519     net_starttls: SSL_accept failed (SSL_ERROR 1): Undefined error: 0
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:486:     my $msg = shift;
  10.521526     [D1:8130:upsd] ssl_error() ret=-1 SSL_ERROR 1
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:487:     $file = '...'.substr( $file,-17 ) if length($file)>20;
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:488:     $msg = sprintf $msg,@_ if @_;
  10.521533     [D1:8130:upsd] ssl_debug: error:0A000410:SSL routines::ssl/tls alert handshake failure
>> /System/Library/Perl/Extras/5.30/IO/Socket/SSL.pm:489:     print STDERR "DEBUG: $file:$line: $msg\n";
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> -1

Disabling CERTVERIFY works to pass the rest of protocol checks on the platform, even with SSL (comewhat untrustworthy though):

Sun Apr 12 11:47:26 UTC 2026 [INFO] [testcase_sandbox_perl_with_credentials] Call Perl module test suite: UPS::Nut (NUT Perl bindings) with login credentials
Sun Apr 12 11:47:26 UTC 2026 [INFO] Adding client-side (Open)SSL config to python env to talk to our OpenSSL-capable upsd
Sun Apr 12 11:47:26 UTC 2026 [WARNING] Disabling CERTVERIFY on darwin platform
UPS::Nut test...
DEBUG: STARTTLS accepted, upgrading socket.
DEBUG: STARTTLS args: SSL_verify_mode=>SSL_VERIFY_NONE Other args: [14] SSL_cert_file=>undef SSL_key_pass=>undef USERNAME=>admin FORCESSL=>1 HOST=>127.0.0.1 PASSWORD=>mypass SSL_key_file=>undef PORT=>35004 USESSL=>1 DEBUG=>1 SSL_ca_path=>/Users/abuild/nut/tmp/etc/cert/rootca NAME=>dummy CERTVERIFY=>0 SSL_ca_file=>undef
'CERTVERIFY' => 0
'DEBUG' => 1
'FORCESSL' => 1
'HOST' => '127.0.0.1'
'NAME' => 'dummy'
'PASSWORD' => 'mypass'
'PORT' => 35004
'SSL_ca_path' => '/Users/abuild/nut/tmp/etc/cert/rootca'
'SSL_hostname' => '127.0.0.1'
'USERNAME' => 'admin'
'USESSL' => 1
DEBUG: .../IO/Socket/SSL.pm:3010: new ctx 105553137710336
DEBUG: .../IO/Socket/SSL.pm:1620: start handshake
DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
DEBUG: .../IO/Socket/SSL.pm:787: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:829: using SNI with hostname 127.0.0.1
DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> 1
DEBUG: .../IO/Socket/SSL.pm:952: ssl handshake done
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    CIEntries related to continuous integration infrastructure (here CI = tools + scripts + recipes)SSL/NSSIssues and PRs about SSL, TLS and other crypto-related mattersVolunteers welcomeCore team members can not commit to these tasks, but community would benefit from their completionbugimpacts-release-2.8.5Issues reported against NUT release 2.8.5 (maybe vanilla or with minor packaging tweaks)perlPerl binding code for NUT

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions