Author: Paolo Lulli <paolo@lulli.net>
certsign: webserver for remote SRC signing
certsign/build.sh | 6 +++ certsign/certsign.groovy | 66 ++++++++++++++++++++++++++++++++++++++++ certsign/certsign.sh | 10 ++++++ certsign/getcertificate.sh | 13 +++++++
diff --git a/certsign/build.sh b/certsign/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..a547bde1d45059112355638cdbbe71ca8a28999d --- /dev/null +++ b/certsign/build.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +cd $(dirname $0); +currdir=$(pwd) + +spring jar ${currdir}/certsign.jar ${currdir}/certsign.groovy diff --git a/certsign/certsign.groovy b/certsign/certsign.groovy new file mode 100644 index 0000000000000000000000000000000000000000..517eed5ae8541e32c6355efcbc1aeb55bc2d486e --- /dev/null +++ b/certsign/certsign.groovy @@ -0,0 +1,66 @@ +import javax.annotation.security.RunAs +import javax.servlet.http.* +import org.springframework.web.multipart.* +import java.nio.file.* +import java.nio.charset.* + +@Controller +class CertSigner { + + public static final String DATADIR = "/tmp/data/"; + public static final String IRON_HOME = System.getProperty("user.home") + "/.iron"; + + @RequestMapping("/certsign/{name}") + @ResponseBody + String home(@PathVariable String name) { + return "Hello "+name; + } + + @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) + @ResponseBody + public String submit(@RequestParam("file") MultipartFile file, ModelMap modelMap) { + modelMap.addAttribute("file", file); + convert(file); + return "fileUploadView"; + } + + @RequestMapping(value = "/upload/{servicename}/{clientname}", method = RequestMethod.POST) + @ResponseBody + public String submitWithParam( + @RequestParam("file") MultipartFile file, + @PathVariable("servicename") String servicename, + @PathVariable("clientname") String clientname, + HttpServletRequest request, + ModelMap modelMap) + { + modelMap.addAttribute("file", file); + convert(file, clientname+".csr"); + String ip = request.getRemoteAddr(); + //ip --> client mapping possible here + + String cmd = "iron certificate sign "+servicename+" "+DATADIR+clientname+".csr"; + cmd.execute(); + String certPath = IRON_HOME + "/"+ servicename + "/certs/" + clientname + "/" + clientname + ".crt"; + + File certFile = new File(certPath); + byte[] encoded = Files.readAllBytes(Paths.get(certPath)); + String certContent = new String(encoded, StandardCharsets.UTF_8); + return certContent; + } + + public static File convert(MultipartFile file) + { + String savedName = file.getOriginalFilename(); + return convert(file, savedName); + } + + public static File convert(MultipartFile file, String savedName) + { + File convFile = new File(DATADIR + savedName); + convFile.createNewFile(); + FileOutputStream fos = new FileOutputStream(convFile); + fos.write(file.getBytes()); + fos.close(); + return convFile; + } +} diff --git a/certsign/certsign.sh b/certsign/certsign.sh new file mode 100755 index 0000000000000000000000000000000000000000..45bfdf59e96aecc9a83da896c66684007db95f28 --- /dev/null +++ b/certsign/certsign.sh @@ -0,0 +1,10 @@ +#! /bin/bash -x + +#-DmaxPostSize=1048576 +server_port=8081 + +cd $(dirname $0); currdir=/tmp + +java -Dserver.port=${server_port}\ + -DmaxPostSize=10485760\ + -jar certsign.jar diff --git a/certsign/getcertificate.sh b/certsign/getcertificate.sh new file mode 100755 index 0000000000000000000000000000000000000000..cd6fbcc0506453a42449eb92a94ba52a0a1ccc72 --- /dev/null +++ b/certsign/getcertificate.sh @@ -0,0 +1,13 @@ +#! /bin/bash + +cd $(dirname $0); +currdir=$(pwd) + +REMOTE_CA_HOST=127.0.0.1 +REMOTE_CA_PORT=8081 + +caricandum=$1 +sname=$2 +cname=$3 + +curl -F "file=@$caricandum" http://$REMOTE_CA_HOST:$REMOTE_CA_PORT/upload/$sname/$cname