summaryrefslogtreecommitdiff
path: root/jstests/ssl/ssl_count_protocols.js
blob: b902b4532dd52c3ba4dd84d6d266ca0c463ad9d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Ensure the server counts the server TLS versions used
(function() {
    'use strict';

    var SERVER_CERT = "jstests/libs/server.pem";
    var CLIENT_CERT = "jstests/libs/client.pem";
    var CA_CERT = "jstests/libs/ca.pem";

    function runTestWithoutSubset(client) {
        let disabledProtocols = ["TLS1_0", "TLS1_1", "TLS1_2"];
        let expectedCounts = [0, 0, 1];
        var index = disabledProtocols.indexOf(client);
        disabledProtocols.splice(index, 1);
        expectedCounts[index] += 1;

        const conn = MongoRunner.runMongod({
            sslMode: 'allowSSL',
            sslPEMKeyFile: SERVER_CERT,
            sslDisabledProtocols: 'none',
        });

        print(disabledProtocols);
        const version_number = client.replace(/TLS/, "").replace(/_/, ".");

        const exitStatus =
            runMongoProgram('mongo',
                            '--ssl',
                            '--sslAllowInvalidHostnames',
                            '--sslPEMKeyFile',
                            CLIENT_CERT,
                            '--sslCAFile',
                            CA_CERT,
                            '--port',
                            conn.port,
                            '--sslDisabledProtocols',
                            disabledProtocols.join(","),
                            '--eval',
                            // The Javascript string "1.0" is implicitly converted to the Number(1)
                            // Workaround this with parseFloat
                            'one = Number.parseFloat(1).toPrecision(2); a = {};' +
                                'a[one] = NumberLong(' + expectedCounts[0] + ');' +
                                'a["1.1"] = NumberLong(' + expectedCounts[1] + ');' +
                                'a["1.2"] = NumberLong(' + expectedCounts[2] + ');' +
                                'assert.eq(db.serverStatus().transportSecurity, a);');

        assert.eq(0, exitStatus, "");

        MongoRunner.stopMongod(conn);
    }

    runTestWithoutSubset("TLS1_0");
    runTestWithoutSubset("TLS1_1");
    runTestWithoutSubset("TLS1_2");

})();