Files
web-check/api/ssl.js
2026-05-07 08:49:19 +01:00

37 lines
1.0 KiB
JavaScript

import tls from 'tls';
import middleware from './_common/middleware.js';
const sslHandler = async (urlString) => {
const parsedUrl = new URL(urlString);
const options = {
host: parsedUrl.hostname,
port: parsedUrl.port || 443,
servername: parsedUrl.hostname,
rejectUnauthorized: false,
};
return new Promise((resolve, reject) => {
const socket = tls.connect(options, () => {
const cert = socket.getPeerCertificate();
if (!cert || Object.keys(cert).length === 0) {
reject(new Error('No certificate presented by the server'));
socket.end();
return;
}
const { raw, issuerCertificate, ...certData } = cert;
resolve({
...certData,
isValid: socket.authorized,
authError: socket.authorizationError || null,
});
socket.end();
});
socket.on('error', (e) => {
reject(new Error(`SSL connection failed: ${e.message}`));
});
});
};
export const handler = middleware(sslHandler);
export default handler;