Follow the RFCs more closely in libpq server certificate hostname check.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 15 Sep 2014 13:14:24 +0000 (16:14 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 15 Sep 2014 13:16:06 +0000 (16:16 +0300)
The RFCs say that the CN must not be checked if a subjectAltName extension
of type dNSName is present. IOW, if subjectAltName extension is present,
but there are no dNSNames, we can still check the CN.

Alexey Klyukin

src/interfaces/libpq/fe-secure-openssl.c

index 98d02b6b6345da61141741d60549426bf6146f08..78aa46de2f3d5c4404ec4dcbf632c8fb74afba63 100644 (file)
@@ -626,12 +626,13 @@ verify_peer_name_matches_certificate(PGconn *conn)
        sk_GENERAL_NAME_free(peer_san);
    }
    /*
-    * If there is no subjectAltName extension, check the Common Name.
+    * If there is no subjectAltName extension of type dNSName, check the
+    * Common Name.
     *
-    * (Per RFC 2818 and RFC 6125, if the subjectAltName extension is present,
-    * the CN must be ignored.)
+    * (Per RFC 2818 and RFC 6125, if the subjectAltName extension of type
+    * dNSName is present, the CN must be ignored.)
     */
-   else
+   if (names_examined == 0)
    {
        X509_NAME  *subject_name;