// Test invalid SSL keyfile settings. import {requireSSLProvider} from "jstests/ssl/libs/ssl_helpers.js"; function runTest(name, config, expect) { jsTest.log("Running test: " + name); clearRawMongoProgramOutput(); let mongod = null; try { mongod = MongoRunner.runMongod(config); } catch (e) { // } assert.eq(null, mongod, "Mongod started unexpectedly"); const output = rawMongoProgramOutput(".*"); assert.eq(true, output.includes(expect), "Server failure message did not include '" + expect + "'"); } const validityMessage = "The provided SSL certificate is expired or not yet valid"; // Test that startup fails with certificate that has yet to become valid. const notYetValid = { tlsMode: "requireTLS", tlsCertificateKeyFile: "jstests/libs/not_yet_valid.pem", tlsCAFile: "jstests/libs/ca.pem", }; runTest("not-yet-valid", notYetValid, validityMessage); // Test that startup fails with expired certificate. const expired = { tlsMode: "requireTLS", tlsCertificateKeyFile: "jstests/libs/expired.pem", tlsCAFile: "jstests/libs/ca.pem", }; runTest("expired", expired, validityMessage); // Test that startup fails with no certificate at all. const needKeyFile = "need tlsCertificateKeyFile or certificateSelector when TLS is enabled"; runTest("no-key-file", {tlsMode: "requireTLS", tlsCAFile: "jstests/libs/ca.pem"}, needKeyFile); // Test that startup also fails if only tlsClusterFile is provided runTest( "cluster-file-only", { tlsMode: "requireTLS", tlsCAFile: "jstests/libs/ca.pem", tlsClusterFile: "jstests/libs/client.pem", }, needKeyFile, ); requireSSLProvider(["windows", "apple"], function () { const selector = "subject=Trusted Kernel Test Server"; // Test that startup also fails if only tlsClusterSelector is provided runTest( "cluster-selector-only", { tlsMode: "requireTLS", tlsCAFile: "jstests/libs/ca.pem", tlsClusterCertificateSelector: selector, }, needKeyFile, ); // Test that startup fails if both key file and cert selector are provided const keyFileAndSelector = { tlsMode: "requireTLS", tlsCAFile: "jstests/libs/ca.pem", tlsCertificateKeyFile: "jstests/libs/client.pem", tlsCertificateSelector: selector, }; runTest( "keyfile-and-selector", keyFileAndSelector, "net.tls.certificateKeyFile is not allowed when net.tls.certificateSelector is specified", ); // Test that startup fails if both cluster file and cluster cert selector are provided const clusterFileAndSelector = { tlsMode: "requireTLS", tlsCAFile: "jstests/libs/ca.pem", tlsClusterFile: "jstests/libs/client.pem", tlsClusterCertificateSelector: selector, }; runTest( "cluster-keyfile-and-selector", clusterFileAndSelector, "net.tls.clusterFile is not allowed when net.tls.clusterCertificateSelector is specified", ); });