// Test changing the --sslMode and --clusterAuthMode parameters using setParameter var SERVER_CERT = "jstests/libs/server.pem"; var CA_CERT = "jstests/libs/ca.pem"; function testSSLTransition(oldMode, newMode, shouldSucceed) { var conn = MongoRunner.runMongod({sslMode: oldMode, sslPEMKeyFile: SERVER_CERT, sslCAFile: CA_CERT}); var adminDB = conn.getDB("admin"); adminDB.createUser({user: "root", pwd: "pwd", roles: ['root']}); adminDB.auth("root", "pwd"); var res = adminDB.runCommand({"setParameter": 1, "sslMode": newMode}); assert(res["ok"] == shouldSucceed, tojson(res)); if (!shouldSucceed) { MongoRunner.stopMongod(conn); return; } if (newMode != "requireSSL") { MongoRunner.stopMongod(conn); return; } let uri = `mongodb://localhost:${conn.port}/admin`; let exitCode = runMongoProgram("mongo", uri, "--eval", "assert.commandWorked(db.isMaster())"); assert.neq(exitCode, 0, "Was able to connect without SSL when SSLMode was requireSSL"); MongoRunner.stopMongod(conn); } function testAuthModeTransition(oldMode, newMode, sslMode, shouldSucceed) { var conn = MongoRunner.runMongod({ sslMode: sslMode, sslPEMKeyFile: SERVER_CERT, sslCAFile: CA_CERT, clusterAuthMode: oldMode }); var adminDB = conn.getDB("admin"); adminDB.createUser({user: "root", pwd: "pwd", roles: ['root']}); adminDB.auth("root", "pwd"); var res = adminDB.runCommand({"setParameter": 1, "clusterAuthMode": newMode}); assert(res["ok"] == shouldSucceed, tojson(res)); MongoRunner.stopMongod(conn); } testSSLTransition("allowSSL", "invalid", false); testSSLTransition("allowSSL", "disabled", false); testSSLTransition("allowSSL", "allowSSL", false); testSSLTransition("allowSSL", "preferSSL", true); testSSLTransition("allowSSL", "requireSSL", false); testSSLTransition("preferSSL", "invalid", false); testSSLTransition("preferSSL", "disabled", false); testSSLTransition("preferSSL", "allowSSL", false); testSSLTransition("preferSSL", "preferSSL", false); testSSLTransition("preferSSL", "requireSSL", true); testSSLTransition("requireSSL", "invalid", false); testSSLTransition("requireSSL", "disabled", false); testSSLTransition("requireSSL", "allowSSL", false); testSSLTransition("requireSSL", "preferSSL", false); testSSLTransition("requireSSL", "requireSSL", false); testAuthModeTransition("sendKeyFile", "invalid", "requireSSL", false); testAuthModeTransition("sendKeyFile", "keyFile", "requireSSL", false); testAuthModeTransition("sendKeyFile", "sendKeyFile", "requireSSL", false); testAuthModeTransition("sendKeyFile", "sendX509", "requireSSL", true); testAuthModeTransition("sendKeyFile", "x509", "requireSSL", false); testAuthModeTransition("sendX509", "invalid", "requireSSL", false); testAuthModeTransition("sendX509", "keyFile", "requireSSL", false); testAuthModeTransition("sendX509", "sendKeyFile", "requireSSL", false); testAuthModeTransition("sendX509", "sendX509", "requireSSL", false); testAuthModeTransition("sendX509", "x509", "requireSSL", true); testAuthModeTransition("x509", "invalid", "requireSSL", false); testAuthModeTransition("x509", "keyFile", "requireSSL", false); testAuthModeTransition("x509", "sendKeyFile", "requireSSL", false); testAuthModeTransition("x509", "sendX509", "requireSSL", false); testAuthModeTransition("x509", "x509", "requireSSL", false); testAuthModeTransition("sendKeyFile", "invalid", "allowSSL", false); testAuthModeTransition("sendKeyFile", "keyFile", "allowSSL", false); testAuthModeTransition("sendKeyFile", "sendKeyFile", "allowSSL", false); testAuthModeTransition("sendKeyFile", "sendX509", "allowSSL", false); testAuthModeTransition("sendKeyFile", "x509", "allowSSL", false);