这几天没事干,学校安排小学期做一个pki证书签发系统,班上的学霸美女一组,哈哈!虽然90%的活都是我做的,但是帮帮女生也是可以得嘛!扯远了!看看效果吧!用的是ssh框架做的一个签发证书网站,有普通用户申请证书,然后管理员利用密钥库生成证书!提供用户下载这个证书安装!看看效果图吧!不过对前台不精通的我也只能做一个这样的界面了,实验室专业做前台的给我改了改!看看效果吧!


效果差不多是这样的。
看看代码怎么实现的吧!首先是数据库,利用mysql数据库,
创建一个名字为pki的数据库!如下图是数据库表的基本字段
用户表和证书基本信息表
用户表

证书表

下面就是证书实现的的重点方法了!由于代码较多,就跳几个重要的贴上来吧!
首先是证书的action

package com.twj.action;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;import com.opensymphony.xwork2.ActionContext;
import com.twj.Enum.CAState;
import com.twj.base.BaseAction;
import com.twj.entity.Cabook;
import com.twj.entity.User;
import com.twj.service.CABookService;
import com.twj.service.UserService;
@Scope("prototype")
@Component
@Action(value="CABookAction",results={@Result(name="login", location="/login.jsp"),@Result(name="success" ,type="redirectAction" ,location="CABookAction!select.action"),@Result(name="select" ,location="/ptuserselectcabook.jsp"),@Result(name="adminselect" ,location="/adminselect.jsp"),@Result(name="cainfo" ,location="/cabookinfo.jsp"),@Result(name="getbookcar" ,type="redirectAction",location="CABookAction!adminQueryNoParams.action")
})
public class CABookAction extends BaseAction {/*** */private static final long serialVersionUID = 1L;@Autowiredprivate CABookService cABookService;@Autowired private UserService userService;private Cabook cabook;private String caCn;private String caOu;private String caO;private String caL;private String caSt;private String caC;private String caStorepass;private String caKeypass;private String caUrl;private Integer UId;private String caStart;private List<Cabook> list=new ArrayList<Cabook>();private User user=new User();//-------该写证书的啦//普通用户申请证书public String apply(){user=(User) ActionContext.getContext().getSession().get("ptUser");if (null==user) {System.out.println("--------------null---------");return "login";}else {cabook=new Cabook();cabook.setCaC(caC);cabook.setCaCn(caCn);cabook.setUId(user.getUId());cabook.setCaKeypass(caKeypass);cabook.setCaL(caL);cabook.setCaO(caO);cabook.setCaOu(caOu);cabook.setCaSt(caSt);cabook.setCaStart(CAState.NOPASS.getDiscribe());cabook.setCaStorepass(caStorepass);Date d=new Date();SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");String url=f.format(d);caUrl="d:/"+user.getUName()+url+".keystore";cabook.setCaUrl(caUrl);cABookService.Save(cabook);genkey();return "success";  }}//普通用户默认查询public String selectdef(){user=(User) ActionContext.getContext().getSession().get("ptUser");list.clear();list=cABookService.getBooKById(user.getUId());return "select";} private String caselecttype;//普通用户按状态查询public String select(){user=(User) ActionContext.getContext().getSession().get("ptUser");list.clear();list=cABookService.getBookByUId(user.getUId(),caselecttype);return "select";} private Integer downCaBookId;//---------------admin操作private  String adcaState;private List<Cabook>adcabooklist=new ArrayList<Cabook>();//管理员条件查询证书public String adminquery(){user=(User) ActionContext.getContext().getSession().get("admin");if (null==user) {return "login";}else {list.clear();list= cABookService.getBookByStart(adcaState);return"adminselect";}}//管理员默认查询所有证书public String adminQueryNoParams(){user=(User) ActionContext.getContext().getSession().get("admin");if (null==user) {return "login";}else {list.clear();list= cABookService.getBookByStart();return"adminselect";}}//管理员查看证书详细信息public String adminselectCaInfor(){user=(User) ActionContext.getContext().getSession().get("admin");if (null==user) {return "login";}else { cabook= cABookService.getCaBookById(caBookId);return"cainfo";}       }private Integer caBookId;//管理员签发证书public String adminsetCAbook(){user=(User) ActionContext.getContext().getSession().get("admin");if (null==user) {return "login";}else {   Cabook cabook= cABookService.getCaBookById(caBookId);System.out.println("------------>>"+cabook.getCaCn());export(cabook);return"getbookcar";}}//管理员删除证书public String deleteca(){Cabook cabook=cABookService.getCaBookById(caBookId);java.io.File file=new java.io.File(cabook.getCaUrl());cABookService.delete(cabook);if (file.exists())file.delete();return "getbookcar";}public String downloadFile(){return SUCCESS;}//--------------证书下载public String getDownloadFile() {Cabook car=cABookService.getCaBookById(downCaBookId);String inputPath=car.getCaUrl();if(inputPath!=null&&!"".equals(inputPath)){HttpServletResponse response = ServletActionContext.getResponse();     response.setHeader("content-disposition", "attachment;filename=certificate" +car.getCaC()+inputPath.substring(inputPath.indexOf("."),inputPath.length()));byte[] buf = new byte[1000];FileInputStream fos = null;try {String file=car.getCaUrl();fos = new FileInputStream(file); ServletOutputStream out = response.getOutputStream();while (fos.read(buf) != -1) {out.write(buf);}response.flushBuffer();out.close();} catch (Exception e) {e.printStackTrace();} finally {try {fos.close();} catch (Exception f) {}}}else{HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);try {String message="还没有上传文件";response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write(message);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}return null;}//--------------------/** * 生成密钥 */  public void genkey() {  String[] arstringCommand = new String[] {  "cmd ", "/k",  "start", // cmd Shell命令  "G:\\java\\bin\\keytool",  "-genkey", // -genkey表示生成密钥  "-validity", // -validity指定证书有效期(单位:天),这里是36500天  "36500",  "-keysize",//     指定密钥长度  "1024",  "-alias", // -alias指定别名,这里是ss  "ss",  "-keyalg", // -keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA))  "RSA",  "-keystore", // -keystore指定存储位置,这里是d:/demo.keystore  caUrl,  "-dname",// CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称),  // ST=(州或省份名称), C=(单位的两字母国家代码)"  "CN=("+caCn+"), OU=("+caOu+"), O=("+caO+"), L=("+caL+"),ST=("+caSt+"), C=("+caC+")",  "-storepass", // 指定密钥库的密码(获取keystore信息所需的密码)  "123456",   "-keypass",// 指定别名条目的密码(私钥的密码)  caKeypass,   "-v"// -v 显示密钥库中的证书详细信息  };  execCommand(arstringCommand);  }  /** * 管理员 导出证书文件 */  public void export(Cabook cabook) {  User user= userService.getUserById(cabook.getUId());String url="d:/"+user.getUName()+cabook.getCaId()+".cer";String[] arstringCommand = new String[] {  "cmd ", "/k",  "start", // cmd Shell命令  "G:\\java\\bin\\keytool",  "-export", // - export指定为导出操作   "-keystore", // -keystore指定keystore文件,这里是d:/demo.keystore  cabook.getCaUrl(),  "-alias", // -alias指定别名,这里是ss  "ss",  "-file",//-file指向导出路径  "d:/"+user.getUName()+cabook.getCaId()+".cer",  "-storepass",// 指定密钥库的密码  "123456"  };  execCommand(arstringCommand);  cabook.setCaStart(CAState.PASS.getDiscribe());cabook.setCaUrl(url);cABookService.updata(cabook);}  public void execCommand(String[] arstringCommand) { for (int i = 0; i < arstringCommand.length; i++) {  System.out.print(arstringCommand[i] + " ");  }  try {  Runtime.getRuntime().exec(arstringCommand);  } catch (Exception e) {  System.out.println(e.getMessage());  }  }  public void execCommand(String arstringCommand) {  try {  Runtime.getRuntime().exec(arstringCommand);  } catch (Exception e) {  System.out.println(e.getMessage());  }  }  public String getCaselecttype() {return caselecttype;}public void setCaselecttype(String caselecttype) {this.caselecttype = caselecttype;}public List<Cabook> getAdcabooklist() {return adcabooklist;}public void setAdcabooklist(List<Cabook> adcabooklist) {this.adcabooklist = adcabooklist;}public String getAdcaState() {return adcaState;}public void setAdcaState(String adcaState) {this.adcaState = adcaState;}public String getCaCn() {return caCn;}public void setCaCn(String caCn) {this.caCn = caCn;}public String getCaOu() {return caOu;}public void setCaOu(String caOu) {this.caOu = caOu;}public String getCaO() {return caO;}public void setCaO(String caO) {this.caO = caO;}public String getCaL() {return caL;}public void setCaL(String caL) {this.caL = caL;}public String getCaSt() {return caSt;}public void setCaSt(String caSt) {this.caSt = caSt;}public String getCaC() {return caC;}public void setCaC(String caC) {this.caC = caC;}public Integer getCaBookId() {return caBookId;}public void setCaBookId(Integer caBookId) {this.caBookId = caBookId;}public String getCaStorepass() {return caStorepass;}public void setCaStorepass(String caStorepass) {this.caStorepass = caStorepass;}public String getCaKeypass() {return caKeypass;}public void setCaKeypass(String caKeypass) {this.caKeypass = caKeypass;}public String getCaUrl() {return caUrl;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public void setCaUrl(String caUrl) {this.caUrl = caUrl;}public Integer getUId() {return UId;}public void setUId(Integer uId) {UId = uId;}public String getCaStart() {return caStart;}public void setCaStart(String caStart) {this.caStart = caStart;}public List<Cabook> getList() {return list;}public void setList(List<Cabook> list) {this.list = list;}public Integer getDownCaBookId() {return downCaBookId;}public void setDownCaBookId(Integer downCaBookId) {this.downCaBookId = downCaBookId;}public Cabook getCabook() {return cabook;}public void setCabook(Cabook cabook) {this.cabook = cabook;}
}

用户action

package com.twj.action;import java.util.Map;import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;import com.opensymphony.xwork2.ActionContext;
import com.sun.net.httpserver.HttpContext;
import com.twj.Enum.CAState;
import com.twj.Enum.UserType;
import com.twj.base.BaseAction;
import com.twj.entity.User;
import com.twj.service.UserService;
@Scope("prototype")
@Component
@Action(value="UserAction",results={@Result(name="login", location="/login.jsp"),@Result(name="success" ,type="redirectAction",location="CABookAction!selectdef.action"),@Result(name="admin" ,type="redirectAction",location="CABookAction!adminQueryNoParams.action")
})
public class UserAction extends BaseAction {/*** */private static final long serialVersionUID = 1L;@Autowiredprivate UserService userService;private User user;private String UName;private String UPsd;private String UType;private Map<String, Object> session;//注册public String register(){if (UName==null&&UPsd==null&&UType==null) {return "register";}else {user=new User();user.setUName(UName);user.setUPsd(UPsd);user.setUType(UType);System.out.println("------------------"+UType+UserType.valueOf(1).getDiscribe()+"----------------");userService.register(user);User logUser=    userService.login(UName, UPsd);session=ActionContext.getContext().getSession();if (UType.equals(UserType.valueOf(1).getDiscribe())) {session.put("ptUser",logUser);return "login";}else {session.put("admin",logUser);return "login";}}}//登陆private User loginuser=new User();public String login(){if (UName==null&&UPsd==null) {return "login";}else {loginuser=userService.login(UName, UPsd);if (null==loginuser) {return  "login";}session=ActionContext.getContext().getSession();if (loginuser.getUType().equals(UserType.valueOf(1).getDiscribe())) {session.put("ptUser", loginuser);return "success";}session.put("admin", loginuser);return "admin";}}public User getLoginuser() {return loginuser;}public void setLoginuser(User loginuser) {this.loginuser = loginuser;}public String getUName() {return UName;}public void setUName(String uName) {UName = uName;}public String getUPsd() {return UPsd;}public void setUPsd(String uPsd) {UPsd = uPsd;}public String getUType() {return UType;}public void setUType(String uType) {UType = uType;}}

这就是核心代码吧!源码地址:https://github.com/twjitm/pki

PKI证书签发系统(web版)相关推荐

  1. PKI证书签发系统(web版)新

    原来的项目进行翻新功能维护 采用新的加密算法和生成证书方式. pki-new 新版本 一个pki证书申请,审核和证书下载安装的管理系统软件,通过调用java自带的工具,将信息存入数据库,同时也是一个学 ...

  2. PKI证书签发系统(2.0web版)

    本次修改主要是考虑到分布式系统中, 以及对操作UI进行修改,添加分布式系统支持. pki-new 2.0 新版本 一个pki证书申请,审核和证书下载安装的管理系统软件,通过调用java自带的工具,将信 ...

  3. CA证书签发系统(web版)

    本次修改主要是考虑到分布式系统中, 以及对操作UI进行修改,添加分布式系统支持. pki-new 2.0 新版本 一个pki证书申请,审核和证书下载安装的管理系统软件,通过调用java自带的工具,将信 ...

  4. [发布]看天气WeatherCan V1.0 ---气象数据分析系统web版

    疫情封闭在家,把这两年的技术整理了一下,做了一套比较完整的气象数据分析处理系统:WeatherCan.发布出来大家试用.程序还在开发中,功能很不完善,纯业余兴趣开发,有建议或想参与开发的可跟我联系:h ...

  5. 看天气WeatherCan V1.0 ---气象数据分析系统web版

    版权声明:本文为CSDN博主「老郭1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/HZGJF/articl ...

  6. 如何开发自己的电子地图系统 web版 单机或联网

    电子地图一般可以使用Baidu api等其他的API来制作,优点功能强大,但缺点是需要连接官方服务器,且难以定制自己的内容. 现制作简单的电子地图,不用依赖其他API,而且方便自己扩展,流程如下: 1 ...

  7. PKI详解与openssl实现私有CA证书签发

    加密解密技术基础 在看这篇文章之前,首先需要有加密解密的技术基础: 安全目标: 保密性:确保通信信息不被任何无关的人看到 完整性:实现通信双方的报文不丢失.数据完整性.系统完整性 可用性:通信任何一方 ...

  8. 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论

    当您正在使用电子商务.电子银行转存帐,可能您的Web页面需要经过安全加密处理,那么,此时您就必须用到https,其中的s是secure(安全保护的意思)https是在安全套接层(SSL)之上使用htt ...

  9. Windows server 2008系统各类版本的优缺点比较,Windows2008系统标准版 企业版 数据中心版 WEB版等...

    大家都知道Windows Server 2008 发行了多种版本,以支持各种规模的企业对服务器不断变化的需求.Windows Server 2008 有 5 种不同版本,另外还有三个不支持 Windo ...

最新文章

  1. proteus仿真micropython_【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行...
  2. 【知识小课堂】mongodb 之 查询关键词使用
  3. 软件工程中交流的思考
  4. java验证码限流_Java实现系统限流
  5. leetcode71. 简化路径 Unix 风格
  6. python数组索引和切片_python numpy数组的索引和切片的操作方法
  7. 数据--dp,线段树优化
  8. 疫情之后,人工智能该如何走?
  9. leapmotion手势交互引擎
  10. 随机森林模型及案例(Python)
  11. 在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具
  12. 概率论——马尔科夫链
  13. 数据一致性(CAP原则)
  14. 关系型数据库的ACID指的是什么?
  15. 从羽泉演唱会大数据看在线演出前景
  16. netty源码分析及优点
  17. 计算机技术服务业成本核算,技术服务成本怎么核算?
  18. Qt uchar *转 Hex的QString方法代码
  19. Selenium基础知识 多窗口处理
  20. Discuz!论坛教程之去掉附件图片提示下载框方法

热门文章

  1. 用于描述三维矢量旋转的四元数法的一点理解
  2. 2021.11.20关于用递归来解决进制转换
  3. 信息安全数学基础 Chapter 4——二次剩余与方根
  4. 蓄能电源PSE认证,CE认证,FCC认证,ROHS认证
  5. 【矩阵论】广义逆矩阵与线性方程组求解思维导图
  6. 2018 年 JavaScript 生态圈调查报告出炉!
  7. 边缘计算框架工程与实践-阅读笔记
  8. Jq遍历指定div元素
  9. rocketmq 入门(一)rocketmq控制台搭建
  10. BP信用数据配置更新