From d807c805dc1f92a934e7a0bebfd800d47eded98a Mon Sep 17 00:00:00 2001 From: Otto Mao Date: Mon, 30 Mar 2015 17:39:23 +0800 Subject: [PATCH] improve https support on Windows --- bin.js | 1 + cert/gen-cer.cmd | 27 +++++++++++++++++++++++++++ cert/gen-rootCA.cmd | 12 ++++++++++++ lib/certMgr.js | 19 +++++++++++++------ 4 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 cert/gen-cer.cmd create mode 100644 cert/gen-rootCA.cmd diff --git a/bin.js b/bin.js index c7ce856..21e6d60 100644 --- a/bin.js +++ b/bin.js @@ -33,6 +33,7 @@ if(program.clear){ require("./lib/certMgr").generateRootCA(function(){ process.exit(0); }); + }else if(program.install){ npm.load({ "prefix": process.env.NODE_PATH + '/anyproxy/' diff --git a/cert/gen-cer.cmd b/cert/gen-cer.cmd new file mode 100644 index 0000000..d3a6f83 --- /dev/null +++ b/cert/gen-cer.cmd @@ -0,0 +1,27 @@ +@echo off + +set domain=%1 +set outputPath=%2 +set commonname=%domain% + +set country=ZH +set state=Shanghai +set locality=Shanghai +set organization=a.com +set organizationalunit=IT +set email=a@b.com +set password=a + +echo Generating key request for %domain% + +openssl genrsa -passout pass:%password% -out %domain%.key 2048 + + +echo Removing passphrase from key +openssl rsa -in %domain%.key -passin pass:%password% -out %domain%.key + +echo Creating CSR +openssl req -new -key %domain%.key -out %domain%.csr -passin pass:%password% -subj /C=%country%/ST=%state%/L=%locality%/O=%organization%/OU=%organizationalunit%/CN=%commonname%/emailAddress=%email% + +openssl x509 -req -days 3650 -in %domain%.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out %domain%.crt +echo Finished diff --git a/cert/gen-rootCA.cmd b/cert/gen-rootCA.cmd new file mode 100644 index 0000000..170adc0 --- /dev/null +++ b/cert/gen-rootCA.cmd @@ -0,0 +1,12 @@ +@echo off + +openssl genrsa -out rootCA.key 2048 +openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.crt -subj "/C=CN/ST=SH/L=SH/O=AnyProxy/OU=Section/CN=Anyproxy SSL Proxying/emailAddress=AnyProxy@AnyProxy" +echo ============= +echo rootCA generated at : +echo %cd% +echo ============= + +start . + +rem exit 0 diff --git a/lib/certMgr.js b/lib/certMgr.js index b27c7a3..c231580 100644 --- a/lib/certMgr.js +++ b/lib/certMgr.js @@ -9,16 +9,16 @@ var exec = require('child_process').exec, logUtil = require("./log"), asyncTask = require("async-task-mgr"); -//TODO : unstable in windows -var certDir = path.join(util.getUserHome(),"/.anyproxy_certs/"), +var isWin = /^win/.test(process.platform); + certDir = path.join(util.getUserHome(),"/.anyproxy_certs/"), cmdDir = path.join(__dirname,"..","./cert/"), - cmd_genRoot = path.join(cmdDir,"./gen-rootCA"), - cmd_genCert = path.join(cmdDir,"./gen-cer"), + cmd_genRoot = isWin ? path.join(cmdDir,"./gen-rootCA.cmd") : path.join(cmdDir,"./gen-rootCA"), + cmd_genCert = isWin ? path.join(cmdDir,"./gen-cer.cmd") : path.join(cmdDir,"./gen-cer"), createCertTaskMgr = new asyncTask(); if(!fs.existsSync(certDir)){ try{ - fs.mkdirSync(certDir,0777); //may fail in windows + fs.mkdirSync(certDir,0777); }catch(e){ logUtil.printLog("===========", logUtil.T_ERR); logUtil.printLog("failed to create cert dir ,please create one by yourself - " + certDir, logUtil.T_ERR); @@ -70,9 +70,14 @@ function createCert(hostname,callback){ } function clearCerts(cb){ - exec("rm *.key *.csr *.crt",{cwd : certDir},cb); + if(isWin){ + exec("del * /q",{cwd : certDir},cb); + }else{ + exec("rm *.key *.csr *.crt",{cwd : certDir},cb); + } } + function isRootCAFileExists(){ var crtFile = path.join(certDir,"rootCA.crt"), keyFile = path.join(certDir,"rootCA.key"); @@ -119,7 +124,9 @@ function generateRootCA(){ logUtil.printLog(color.green("temp certs cleared")); var spawnSteam = spawn(cmd_genRoot,['.'],{cwd:certDir,stdio: 'inherit'}); + spawnSteam.on('close', function (code) { + if(code == 0){ logUtil.printLog(color.green("rootCA generated")); logUtil.printLog(color.green(color.bold("please trust the rootCA.crt in " + certDir)));