Sync DNS2 production changes - removed obsolete test suite and refactored structure
This commit is contained in:
75
dashcaddy-api/ca/scripts/generate-cert-info.js
Normal file
75
dashcaddy-api/ca/scripts/generate-cert-info.js
Normal file
@@ -0,0 +1,75 @@
|
||||
const { execSync } = require('child_process');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const CERT_PATH = path.join(__dirname, '../root.crt');
|
||||
const OUTPUT_PATH = path.join(__dirname, '../cert-info.json');
|
||||
|
||||
function extractCertInfo() {
|
||||
try {
|
||||
console.log('Extracting certificate information from:', CERT_PATH);
|
||||
|
||||
// Extract SHA-256 fingerprint
|
||||
const fingerprint = execSync(`openssl x509 -in "${CERT_PATH}" -noout -fingerprint -sha256`)
|
||||
.toString()
|
||||
.trim()
|
||||
.split('=')[1];
|
||||
|
||||
// Extract validity dates
|
||||
const dates = execSync(`openssl x509 -in "${CERT_PATH}" -noout -dates`).toString();
|
||||
const notBefore = dates.match(/notBefore=(.*)/)[1].trim();
|
||||
const notAfter = dates.match(/notAfter=(.*)/)[1].trim();
|
||||
|
||||
// Extract subject
|
||||
const subject = execSync(`openssl x509 -in "${CERT_PATH}" -noout -subject`)
|
||||
.toString()
|
||||
.trim()
|
||||
.split('CN = ')[1] || execSync(`openssl x509 -in "${CERT_PATH}" -noout -subject`)
|
||||
.toString()
|
||||
.trim()
|
||||
.split('CN=')[1];
|
||||
|
||||
// Extract serial number
|
||||
const serialNumber = execSync(`openssl x509 -in "${CERT_PATH}" -noout -serial`)
|
||||
.toString()
|
||||
.trim()
|
||||
.split('=')[1];
|
||||
|
||||
// Calculate days until expiration
|
||||
const expirationDate = new Date(notAfter);
|
||||
const today = new Date();
|
||||
const daysUntilExpiration = Math.floor((expirationDate - today) / (1000 * 60 * 60 * 24));
|
||||
|
||||
const certInfo = {
|
||||
name: subject,
|
||||
fingerprint: fingerprint,
|
||||
validFrom: notBefore,
|
||||
validUntil: notAfter,
|
||||
daysUntilExpiration: daysUntilExpiration,
|
||||
algorithm: 'ECDSA P-256 with SHA-256',
|
||||
issuer: subject, // Self-signed root CA
|
||||
serialNumber: serialNumber,
|
||||
generatedAt: new Date().toISOString()
|
||||
};
|
||||
|
||||
fs.writeFileSync(OUTPUT_PATH, JSON.stringify(certInfo, null, 2));
|
||||
console.log('✓ Certificate information extracted successfully!');
|
||||
console.log(' Output:', OUTPUT_PATH);
|
||||
console.log(' Name:', certInfo.name);
|
||||
console.log(' Fingerprint:', certInfo.fingerprint);
|
||||
console.log(' Valid until:', certInfo.validUntil);
|
||||
console.log(' Days until expiration:', certInfo.daysUntilExpiration);
|
||||
|
||||
return certInfo;
|
||||
} catch (error) {
|
||||
console.error('Error extracting certificate information:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Run if called directly
|
||||
if (require.main === module) {
|
||||
extractCertInfo();
|
||||
}
|
||||
|
||||
module.exports = { extractCertInfo };
|
||||
Reference in New Issue
Block a user