Skip to content

Commit 49b0255

Browse files
committed
MLE-16819 : Support TLSv1.3 via Node Client
1 parent 5fe6126 commit 49b0255

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

lib/marklogic.js

+3
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,9 @@ function initClient(client, inputParams) {
793793
mlutil.copyProperties(inputParams, agentOptions, [
794794
'keepAliveMsecs', 'maxCachedSessions', 'maxFreeSockets', 'maxSockets', 'maxTotalSockets', 'scheduling', 'timeout'
795795
]);
796+
agentOptions.secureProtocol = 'TLS_method';
797+
agentOptions.secureOptions = require('constants').SSL_OP_NO_TLSv1 | require('constants').SSL_OP_NO_TLSv1_1;
798+
796799
connectionParams.agent = new https.Agent(agentOptions);
797800
} else {
798801
connectionParams.agent = inputParams.agent;

test-basic/ssl-min-allow-tls-test.js

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
* Copyright (c) 2025 MarkLogic Corporation
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
let testconfig = require('../etc/test-config.js');
18+
let should = require('should');
19+
let marklogic = require('../');
20+
const { exec } = require('child_process');
21+
let db = marklogic.createDatabaseClient(testconfig.restWriterConnection);
22+
23+
describe('document content', function(){
24+
this.timeout(5000);
25+
before(function(done){
26+
updateTlsVersion('TLSv1.3');
27+
setTimeout(()=>{done();}, 3000);
28+
});
29+
30+
after(function(done){
31+
db.documents.remove('/test/write_tlsV1.3.json', '/test/write_tlsV1.2.json')
32+
.result(()=> done())
33+
.catch(error=> done(error));
34+
});
35+
36+
it('should write document with minimum TLS versions 1.3 and 1.2', function (done) {
37+
38+
db.documents.write({
39+
uri: '/test/write_tlsV1.3.json',
40+
contentType: 'application/json',
41+
content: '{"key1":"With TLS 1.3"}'
42+
})
43+
.result(function (response) {
44+
db.documents.read('/test/write_tlsV1.3.json')
45+
.result(function (documents) {
46+
documents[0].content.should.have.property('key1');
47+
documents[0].content.key1.should.equal('With TLS 1.3');
48+
49+
}).then(()=>{
50+
updateTlsVersion('TLSv1.2');
51+
})
52+
.then(() => {
53+
db.documents.write({
54+
uri: '/test/write_tlsV1.2.json',
55+
contentType: 'application/json',
56+
content: '{"key1":"With TLS 1.2"}'
57+
}).result(function () {
58+
db.documents.read('/test/write_tlsV1.2.json')
59+
.result(function (documents) {
60+
documents[0].content.should.have.property('key1');
61+
documents[0].content.key1.should.equal('With TLS 1.2');
62+
done();
63+
})
64+
})
65+
})
66+
.catch(error => done(error));
67+
})
68+
.catch(error => done(error));
69+
});
70+
})
71+
72+
function updateTlsVersion(tlsVersion) {
73+
return new Promise((resolve, reject) => {
74+
const curlCommand = `
75+
curl --anyauth --user admin:admin -X PUT -H "Content-Type: application/json" \\
76+
-d '{"ssl-min-allow-tls": "${tlsVersion}"}' \\
77+
'http://localhost:8002/manage/v2/servers/unittest-nodeapi/properties?group-id=Default'
78+
`;
79+
exec(curlCommand, (error, stdout, stderr) => {
80+
if (error) {
81+
throw new Error(`Error executing curl: ${stderr}`);
82+
}
83+
});
84+
});
85+
}

0 commit comments

Comments
 (0)