Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hello,
We recently installed a new SSL certificate on our Qlik Sense server and configured the Central Proxy to reference this custom certificate.
Full details of our setup are similar to this discussion:
https://community.qlik.com/t5/Management-Governance/Qlik-Sense-still-using-default-certificate-rathe...
We can now access Qlik Sense from the configured DNS (qliksenseserver.company.com)) in a browser, and the correct certificate is displayed there. However, when we tried exporting certificates from the QMC on DNS name, they still appear based on the default self-signed certificate.
As a result, any backend client (e.g., Java WebSocket clients) fails SSL validation with an error like:
Error:
javax.net.ssl.SSLHandshakeException: No subject alternative DNS name matching qliksenseserver.company.com)found.
Similarly, using curl results in:
curl: (60) SSL: no alternative certificate subject name matches target host name
This suggests that the exported certificates do not include the configured DNS name (no SAN — Subject Alternative Name — entry for the domain).
Question:
How can we export client certificates from Qlik Sense that include the correct SAN or are aligned with the new configured dns name (qliksenseserver.company.com)?
Hi Nilesh,
The 3rd party SSL cert binds itself to port 443 for https traffic.
I would suggest from the responses that you are coming into the Sense server via one of the APIs such as 4242 for the QRS api.
Your new SSL certificate won't be bound to that port.
This would work if you were calling the Proxy API over port 443, but with the rest you're going to have to use the server name.
Thanks,
Simon
Hi Simon,
I am not connecting to the 4242 QRS APIs; instead, I am trying to connect to the QlikSense WebSocket using Java, but I am encountering an error.
However, when I connect using Node.js with the public DNS, I am able to establish a connection successfully. Here’s the Node.js code I used:
const WebSocket = require('ws');
const fs = require('fs');
const path = require('path');
var certPath = path.join('C:', 'ProgramData', 'Qlik', 'Sense', 'Repository', 'Exported Certificates', '.Local Certificates');
var certificates = {
cert: fs.readFileSync(path.resolve(certPath, 'client.pem')),
key: fs.readFileSync(path.resolve(certPath, 'client_key.pem')),
root: fs.readFileSync(path.resolve(certPath, 'root.pem'))
};
const ws = new WebSocket('wss://qliksensebi-uat.qliksense.com:4747/app/', {
ca: [certificates.root],
cert: certificates.cert,
key: certificates.key,
headers: {
'X-Qlik-User': 'UserDirectory=qliksense3; UserId=nilesh'
},
rejectUnauthorized: false
});
ws.onopen = function (event) {
console.log("Connected");
};When trying to connect using Java, I am receiving an error. I would appreciate your assistance in troubleshooting this issue.