> On 23 May 2023, at 05:07, Maxim Dounin <mdou...@mdounin.ru> wrote: > > Hello! > > On Mon, May 22, 2023 at 11:52:16PM +0400, Sergey Kandaurov wrote: > >> # HG changeset patch >> # User Sergey Kandaurov <pluk...@nginx.com> >> # Date 1684774417 -14400 >> # Mon May 22 20:53:37 2023 +0400 >> # Node ID 42066e126d2ca0f6d5095d818910559adf5d4bdc >> # Parent e60c76cbf2a5b0d9e1d235770d68f260cf1a4e3e >> Tests: avoid specifying PSS in sigalgs unless in TLSv1.3. >> >> It might happen that TLSv1.3 is disabled and PSS isn't supported as seen >> on Amazon Linux (LTS). The change restores old logic before 0e1865aa9b33. >> >> diff --git a/ssl_certificates.t b/ssl_certificates.t >> --- a/ssl_certificates.t >> +++ b/ssl_certificates.t >> @@ -120,8 +120,8 @@ sub get_socket { >> return unless defined $type; >> my $ssleay = Net::SSLeay::SSLeay(); >> return if ($ssleay < 0x1000200f || $ssleay == 0x20000000); >> - my $sigalgs = 'RSA+SHA256:PSS+SHA256'; >> - $sigalgs = $type . '+SHA256' unless $type eq 'RSA'; >> + my $sigalgs = $type eq 'RSA' && test_tls13() >> + ? 'RSA+SHA256:PSS+SHA256' : $type . '+SHA256'; >> # SSL_CTRL_SET_SIGALGS_LIST >> Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs) >> or die("Failed to set sigalgs"); >> diff --git a/ssl_stapling.t b/ssl_stapling.t >> --- a/ssl_stapling.t >> +++ b/ssl_stapling.t >> @@ -321,8 +321,8 @@ sub staple { >> return unless defined $ciphers; >> my $ssleay = Net::SSLeay::SSLeay(); >> return if ($ssleay < 0x1000200f || $ssleay == 0x20000000); >> - my $sigalgs = 'RSA+SHA256:PSS+SHA256'; >> - $sigalgs = $ciphers . '+SHA256' unless $ciphers eq 'RSA'; >> + my $sigalgs = $ciphers eq 'RSA' && test_tls13() >> + ? 'RSA+SHA256:PSS+SHA256' : $ciphers . '+SHA256'; >> # SSL_CTRL_SET_SIGALGS_LIST >> Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs) >> or die("Failed to set sigalgs"); > > I would rather refrain from SSL connections as in test_tls13() > when creating an SSL context, hence the change.
I don't like this as well and prefer to avoid if possible. > > But it looks like I was wrong assuming OpenSSL handles sigalgs > similarly to ciphers, and ignores unknown ones. Looking through > the code suggests it instead returns an error if it sees an > unknown signature algorithm, so trying to set > 'RSA+SHA256:PSS+SHA256' fails if OpenSSL does not support TLSv1.3. > > Something like this should be enough to address this without > introducing additional TLSv1.3 tests: > Applied, tnx. > diff -r a797d7428fa5 ssl_certificates.t > --- a/ssl_certificates.t Thu May 18 18:07:19 2023 +0300 > +++ b/ssl_certificates.t Tue May 23 01:03:42 2023 +0000 > @@ -120,10 +120,11 @@ > return unless defined $type; > my $ssleay = Net::SSLeay::SSLeay(); > return if ($ssleay < 0x1000200f || $ssleay == 0x20000000); > - my $sigalgs = 'RSA+SHA256:PSS+SHA256'; > - $sigalgs = $type . '+SHA256' unless $type eq 'RSA'; > + my @sigalgs = ('RSA+SHA256:PSS+SHA256', 'RSA+SHA256'); > + @sigalgs = ($type . '+SHA256') unless $type eq 'RSA'; > # SSL_CTRL_SET_SIGALGS_LIST > - Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs) > + Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs[0]) > + or Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs[1]) > or die("Failed to set sigalgs"); > }; > > diff -r a797d7428fa5 ssl_stapling.t > --- a/ssl_stapling.t Thu May 18 18:07:19 2023 +0300 > +++ b/ssl_stapling.t Tue May 23 01:03:42 2023 +0000 > @@ -319,10 +319,11 @@ > return unless defined $ciphers; > my $ssleay = Net::SSLeay::SSLeay(); > return if ($ssleay < 0x1000200f || $ssleay == 0x20000000); > - my $sigalgs = 'RSA+SHA256:PSS+SHA256'; > - $sigalgs = $ciphers . '+SHA256' unless $ciphers eq 'RSA'; > + my @sigalgs = ('RSA+SHA256:PSS+SHA256', 'RSA+SHA256'); > + @sigalgs = ($ciphers . '+SHA256') unless $ciphers eq 'RSA'; > # SSL_CTRL_SET_SIGALGS_LIST > - Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs) > + Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs[0]) > + or Net::SSLeay::CTX_ctrl($ctx, 98, 0, $sigalgs[1]) > or die("Failed to set sigalgs"); > }; > > > (The code basically retries with 'RSA+SHA256' if setting sigalgs > to 'RSA+SHA256:PSS+SHA256'. If an error happens with ECDSA, it > also retries with undefined, and then reports the error.) -- Sergey Kandaurov _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel