return 1;
     }
     /*Make sure the key and certificate file match*/
-    if ( (err = SSL_check_private_key(ssl)) != 1) {
-        set_error(cc, ERR_get_error(), SSL_ERROR, "Private key does not match"
-                " the certificate public key"); 
-        return 1;
-    }
+    if ( (err = SSL_check_private_key(ssl)) != 1)
+        return set_error(cc, ERR_get_error(), SSL_ERROR, "Private key"
+               " does not match the certificate public key"); 
 
     *ctx = ssl;
 
             if (err)
                 return err;
         }
+        else {
+            if (user_cert_fn && !access(user_cert_fn, R_OK)) {
+                err = do_set_ctx_own_cert_file(cc, user_cert_fn, NULL);
+                if (err)
+                    return err;
+            }
+            if (user_key_fn && !access(user_key_fn, R_OK)) {
+                err = do_set_ctx_own_cert_file(cc, NULL, user_key_fn);
+                if (err)
+                    return err;
+            }
+        }
     }
 
     free(user_cert_fn);
                         "use private key");
             }
         }
-        else if (cc->cert_key->cert) {
+        if (cc->cert_key->cert) {
             err = SSL_use_certificate(ssl, cc->cert_key->cert);
             if (err != 1) {
                 return set_error(cc, ERR_get_error(), SSL_ERROR, "Cannot"
             }
         }
     }
+    /*Make sure the key and certificate file match
+     * not mandatory on client side*/
+    if (cc->cert_key->cert && cc->cert_key->key)
+    if ( (err = SSL_check_private_key(ssl)) != 1)
+        return set_error(cc, ERR_get_error(), SSL_ERROR, "Private key"
+                " does not match the certificate public key"); 
 
     *ctx = ssl;
     return 0;