123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- // 调用命令
- '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;
|