When a CertificateFile is provided, do not trust the system store by
default, since this is not the expected behavior for X.509 certificates.

SystemCertificates can still be explicitly allowed/disallowed to restore
the previous behavior.
---
 NEWS           |  3 +++
 src/drv_imap.c |  2 +-
 src/mbsync.1   | 13 ++++++-------
 src/socket.c   |  9 +++++----
 4 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index ebb88a4..f6c7e4a 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,9 @@ A Maildir sub-folder naming style without extra dots has been 
added.
 
 Support for TLS client certificates was added.
 
+System certificates are no longer trusted by default when a CertificateFile has
+been explicitly specified.
+
 Support for recovering from baseless UID validity changes was added.
 
 [1.2.0]
diff --git a/src/drv_imap.c b/src/drv_imap.c
index e24c7d8..1290403 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -2822,7 +2822,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep )
 #ifdef HAVE_LIBSSL
        server->ssl_type = -1;
        server->sconf.ssl_versions = -1;
-       server->sconf.system_certs = 1;
+       server->sconf.system_certs = -1;
 #endif
        server->max_in_progress = INT_MAX;
 
diff --git a/src/mbsync.1 b/src/mbsync.1
index 627181e..b98720c 100644
--- a/src/mbsync.1
+++ b/src/mbsync.1
@@ -369,17 +369,16 @@ servers, \fBTLSv1\fR is the default.
 .TP
 \fBSystemCertificates\fR \fByes\fR|\fBno\fR
 Whether the system's default root cerificate store should be loaded.
-(Default: \fByes\fR)
+Defaults to yes, unless a \fBCertificateFile\fR has been provided.
 ..
 .TP
 \fBCertificateFile\fR \fIpath\fR
-File containing additional X.509 certificates used to verify server
-identities. Directly matched peer certificates are always trusted,
-regardless of validity.
+File containing X.509 certificates used to verify server identities. Directly
+matched peer certificates are always trusted, regardless of validity.
 .br
-Note that the system's default certificate store is always used
-(unless \fBSystemCertificates\fR is disabled)
-and should not be specified here.
+Note that the system's default certificate store must be manually enabled
+(using \fBSystemCertificates yes\fR) if system certificates must be trusted in
+addition to the specified certificate.
 ..
 .TP
 \fBClientCertificate\fR \fIpath\fR
diff --git a/src/socket.c b/src/socket.c
index 6ab3ce4..f573e6b 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -227,10 +227,11 @@ init_ssl_ctx( const server_conf_t *conf )
                return 0;
        }
        mconf->trusted_certs = (_STACK *)sk_X509_OBJECT_dup( 
X509_STORE_get0_objects( SSL_CTX_get_cert_store( mconf->SSLContext ) ) );
-       if (mconf->system_certs && !SSL_CTX_set_default_verify_paths( 
mconf->SSLContext ))
-               warn( "Warning: Unable to load default certificate files: %s\n",
-                     ERR_error_string( ERR_get_error(), 0 ) );
-
+       if ((mconf->system_certs < 0 && !conf->cert_file) || 
mconf->system_certs > 0) {
+               if (!SSL_CTX_set_default_verify_paths( mconf->SSLContext ))
+                       warn( "Warning: Unable to load default certificate 
files: %s\n",
+                             ERR_error_string( ERR_get_error(), 0 ) );
+       }
        SSL_CTX_set_verify( mconf->SSLContext, SSL_VERIFY_NONE, NULL );
 
        if (conf->client_certfile && !SSL_CTX_use_certificate_chain_file( 
mconf->SSLContext, conf->client_certfile)) {
-- 
2.11.0



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
isync-devel mailing list
isync-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to