58 lines
1.8 KiB
JavaScript
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);
|
|
}
|