Re: "cert" + clientcert=verify-ca in pg_hba.conf? - Mailing list pgsql-hackers

From Kyotaro Horiguchi
Subject Re: "cert" + clientcert=verify-ca in pg_hba.conf?
Date
Msg-id 20201005.102508.1114563385970077497.horikyota.ntt@gmail.com
Whole thread Raw
In response to Re: "cert" + clientcert=verify-ca in pg_hba.conf?  (Bruce Momjian <bruce@momjian.us>)
Responses Re: "cert" + clientcert=verify-ca in pg_hba.conf?
List pgsql-hackers
At Fri, 2 Oct 2020 22:55:45 -0400, Bruce Momjian <bruce@momjian.us> wrote in 
> On Fri, Sep 25, 2020 at 09:33:48AM +0900, Kyotaro Horiguchi wrote:
> > At Thu, 24 Sep 2020 11:43:40 -0400, Bruce Momjian <bruce@momjian.us> wrote in 
> > > On Thu, Sep 24, 2020 at 12:44:01PM +0900, Michael Paquier wrote:
> > > > On Tue, Sep 01, 2020 at 10:27:03PM -0400, Bruce Momjian wrote:
> > > > > OK, good.  Let's wait a few days and I will then apply it for PG 14.
> > > > 
> > > > It has been a few days, and nothing has happened here.  I have not
> > > > looked at the patch in details, so I cannot say if that's fine or not,
> > > > but please note that the patch fails to apply per the CF bot.
> > > 
> > > I will handle it.
> > 
> > Thank you Bruce, Michael. This is a rebased version.
> > 
> > regards.
> > 
> > -- 
> > Kyotaro Horiguchi
> > NTT Open Source Software Center
> 
> > >From 2978479ada887284eae0ed36c8acf29f1a002feb Mon Sep 17 00:00:00 2001
> > From: Kyotaro Horiguchi <horikyoga.ntt@gmail.com>
> > Date: Tue, 21 Jul 2020 23:01:27 +0900
> > Subject: [PATCH v2] Allow directory name for GUC ssl_crl_file and connection
> >  option sslcrl
> > 
> > X509_STORE_load_locations accepts a directory, which leads to
> > on-demand loading method with which method only relevant CRLs are
> > loaded.
> 
> Uh, I think this CRL patch is the wrong patch.  This thread is about the
> clientcert=verify-ca in pg_hba.conf.  I will use the patch I developed
> and posted on Tue, 1 Sep 2020 11:47:34 -0400 in this thread.

Mmmm. Sorry for the silly mistake. I'm confused with another one.

FWIW, the cause is a rewording of "cannot" to "can not". This is the
right one.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml
index d62d1a061c..bad3c3469c 100644
--- a/doc/src/sgml/client-auth.sgml
+++ b/doc/src/sgml/client-auth.sgml
@@ -2044,13 +2044,10 @@ host ... radius radiusservers="server1,server2" radiussecrets="""secret one"",""
    </para>
 
    <para>
-    In a <filename>pg_hba.conf</filename> record specifying certificate
-    authentication, the authentication option <literal>clientcert</literal> is
-    assumed to be <literal>verify-ca</literal> or <literal>verify-full</literal>,
-    and it cannot be turned off since a client certificate is necessary for this
-    method. What the <literal>cert</literal> method adds to the basic
-    <literal>clientcert</literal> certificate validity test is a check that the
-    <literal>cn</literal> attribute matches the database user name.
+    It is redundant to use the <literal>clientcert</literal> option with
+    <literal>cert</literal> authentication because <literal>cert</literal>
+    authentication is effectively <literal>trust</literal> authentication
+    with <literal>clientcert=verify-full</literal>.
    </para>
   </sect1>
 
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 418aa3f85c..17e938148c 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -2345,9 +2345,8 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
    The <literal>clientcert</literal> authentication option is available for
    all authentication methods, but only in <filename>pg_hba.conf</filename> lines
    specified as <literal>hostssl</literal>.  When <literal>clientcert</literal> is
-   not specified or is set to <literal>no-verify</literal>, the server will still
-   verify any presented client certificates against its CA file, if one is
-   configured — but it will not insist that a client certificate be presented.
+   not specified, the server verifies the client certificate against its CA
+   file only if a client certificate is presented and the CA is configured.
   </para>
 
   <para>
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 7b54ffc31e..8de437422d 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -1730,29 +1730,24 @@ parse_hba_auth_opt(char *name, char *val, HbaLine *hbaline,
             *err_msg = "clientcert can only be configured for \"hostssl\" rows";
             return false;
         }
-        if (strcmp(val, "1") == 0
-            || strcmp(val, "verify-ca") == 0)
-        {
-            hbaline->clientcert = clientCertCA;
-        }
-        else if (strcmp(val, "verify-full") == 0)
+
+         if (strcmp(val, "verify-full") == 0)
         {
             hbaline->clientcert = clientCertFull;
         }
-        else if (strcmp(val, "0") == 0
-                 || strcmp(val, "no-verify") == 0)
+         else if (strcmp(val, "verify-ca") == 0)
         {
             if (hbaline->auth_method == uaCert)
             {
                 ereport(elevel,
                         (errcode(ERRCODE_CONFIG_FILE_ERROR),
-                         errmsg("clientcert cannot be set to \"no-verify\" when using \"cert\" authentication"),
+                         errmsg("clientcert only accepts \"verify-full\" when using \"cert\" authentication"),
                          errcontext("line %d of configuration file \"%s\"",
                                     line_num, HbaFileName)));
-                *err_msg = "clientcert cannot be set to \"no-verify\" when using \"cert\" authentication";
+                *err_msg = "clientcert can only be set to \"verify-full\" when using \"cert\" authentication";
                 return false;
             }
-            hbaline->clientcert = clientCertOff;
+            hbaline->clientcert = clientCertCA;
         }
         else
         {

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: A modest proposal: let's add PID to assertion failure messages
Next
From: "k.jamison@fujitsu.com"
Date:
Subject: RE: [Patch] Optimize dropping of relation buffers using dlist