// 调用命令 'use strict'; const Service = require('egg').Service; const exec = require('child_process').exec; const fs = require('fs'); class ShellService extends Service { async shell(shellString) { console.log(shellString, 'shellString'); return new Promise((resolve, reject) => { exec(shellString, function(error, stdout) { if (error) { reject(error); } resolve({ errcode: 0, errmsg: '', data: stdout && stdout.trim() }); }); }); } // 解析ca证书 async read({ filePath }) { return new Promise((resolve, reject) => { exec(`openssl x509 -in ${filePath} -noout -text -certopt no_header,no_version,no_extensions,no_sigdump,no_serial`, function(error, stdout) { if (error) { reject(error); } resolve({ errcode: 0, errmsg: '', data: stdout }); }); }); } // 创建key async applykey({ pwatype, filePath }) { return new Promise((resolve, reject) => { // 创建密钥对 exec(`pki --gen --type ${pwatype} ${pwatype === 'rsa' ? '--size 2048' : ''} --outform pem`, function(error, stdout) { if (error) { reject(error); } fs.writeFile(filePath, stdout, {}, function(err) { if (err) { reject(err); } resolve({ errmsg: '', errcode: 0 }); }); }); }); } async applyreq({ dn, keyPath, filePath }) { return new Promise((resolve, reject) => { // 创建申请书 exec(`pki --req --type priv --in ${keyPath} \ --dn ${dn} \ --outform pem`, function(error, stdout) { if (error) { reject(error); } fs.writeFile(filePath, stdout, {}, function(err) { if (err) { fs.unlink(keyPath, function(err) { if (err) { reject(err); } }); reject(err); } resolve({ errmsg: '', errcode: 0 }); }); }); }); } // 拆出key async keys({ fileName, password }) { return new Promise((resolve, reject) => { exec(`openssl pkcs12 -info -in ${fileName} -nodes -nocerts -password pass:${password}`, function(error, stdout) { if (error) { reject(error); } const srart = stdout.indexOf('-----BEGIN PRIVATE KEY-----'); const data = stdout.slice(srart, stdout.length); resolve({ errcode: 0, errmsg: '', data }); }); }); } // key格式转换 async transform({ files, target }) { return new Promise((resolve, reject) => { exec(`openssl pkcs8 -in ${files} -traditional -out ${target} -nocrypt`, function(error, stdout) { if (error) { reject(error); } resolve({ errcode: 0, errmsg: '', data: stdout }); }); }); } // 拆出证书 async certs({ fileName, password }) { return new Promise((resolve, reject) => { exec(`openssl pkcs12 -info -in ${fileName} -password pass:${password} -nokeys -clcerts`, function(error, stdout) { if (error) { reject(error); } const srart = stdout.indexOf('-----BEGIN CERTIFICATE-----'); const data = stdout.slice(srart, stdout.length); resolve({ errcode: 0, errmsg: '', data }); }); }); } } module.exports = ShellService;