kit.program/kit/test/generate_test_p7.js
2026-04-04 08:24:27 +08:00

58 lines
1.8 KiB
JavaScript

const forge = require('node-forge');
console.log('=== 生成测试用的 PKCS7 签名 ===');
try {
// 1. 生成 RSA 密钥对
console.log('生成 RSA 密钥对...');
const keys = forge.pki.rsa.generateKeyPair(1024);
const privateKey = keys.privateKey;
const publicKey = keys.publicKey;
// 2. 创建自签名证书
console.log('创建自签名证书...');
const cert = forge.pki.createCertificate();
cert.publicKey = publicKey;
cert.serialNumber = '01';
cert.validity.notBefore = new Date();
cert.validity.notAfter = new Date();
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);
const attrs = [
{ name: 'commonName', value: 'test.example.com' },
{ name: 'organizationName', value: 'Test Organization' }
];
cert.setSubject(attrs);
cert.setIssuer(attrs);
cert.sign(privateKey, forge.md.sha256.create());
// 3. 创建 PKCS7 签名
console.log('创建 PKCS7 签名...');
const p7 = forge.pkcs7.createSignedData();
p7.content = forge.util.createBuffer('This is the test content for PKCS7 signature.');
p7.addCertificate(cert);
p7.addSigner({
key: privateKey,
certificate: cert,
digestAlgorithm: forge.pki.oids.sha256
});
p7.sign();
// 4. 转换为 PEM 格式
const pem = forge.pkcs7.messageToPem(p7);
console.log('\n=== 生成的 PKCS7 签名 PEM 格式 ===');
console.log(pem);
console.log('\n=== 提取 base64 部分 ===');
const base64 = pem.replace(/-----BEGIN PKCS7-----\n?/, '')
.replace(/-----END PKCS7-----\n?/, '')
.replace(/\n/g, '');
console.log(base64);
console.log('\n=== 完成 ===');
} catch (error) {
console.error('生成失败:', error);
console.error(error.stack);
}