PKI证书签发系统(web版)

这几天没事干,学校安排小学期做一个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;

    @Autowired
    private 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;

    @Autowired
    private 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;
    }

}

这就是核心代码吧!需要源码的小伙伴关注我留下邮箱!

时间: 2024-08-27 06:39:08

PKI证书签发系统(web版)的相关文章

点餐系统web版功能需求

            餐厅到店点餐系统需求分析 (版本v1.0.0)               成文信息 主题词: 需求分析 作  者: 14商软ETC 文档类别: 审  核: 批  准: 文档性质: 正式稿 主  送: 存档日期: 抄  送: 发布日期: 签收信息 发送方 接收方: 接收方: 接收方: 代表人: 代表人: 代表人: 代表人: 日期: 日期: 日期: 日期: 变更信息 版本 原因 作者 日期                   目录 第一章 引言.... 1 1.1 项目名称

沃通可信计算EK证书实时签发系统

应中国密码学会2014年密码芯片学术会议组委会的邀请,沃通(WoSign)CTO王高华先生于2014年9月20日-22日出席了在清华大学举行的此次会议,并做了题为<可信计算芯片EK证书签发系统>的精彩演讲. 沃通在此次会议上首次公开亮相了7月份研发成功的新产品- 可信计算EK证书实时签发系统,此系统是国内第一个不仅完全符合国际可信计算工作组(TCG)标准,而且完全满足微软的要求的EK证书实时签发系统.所有EK证书都是从沃通CA受Windows信任的根证书下签发,不仅支持RSA加密算法,而且支持

沃通可信计算EK证书实时签发系统,首次亮相2014年密码芯片学术会议

应中国密码学会2014年密码芯片学术会议组委会的邀请,沃通(WoSign)CTO王高华先生于2014年9月20日-22日出席了在清华大学举行的此次会议,并做了题为<可信计算芯片EK证书签发系统>的精彩演讲. 沃通在此次会议上首次公开亮相了7月份研发成功的新产品- 可信计算EK证书实时签发系统,此系统是国内第一个不仅完全符合国际可信计算工作组(TCG)标准,而且完全满足微软的要求的EK证书实时签发系统.所有EK证书都是从沃通CA受Windows信任的根证书下签发,不仅支持RSA加密算法,而且支持

基于Pushlet实现的Web版报价系统

项目的原因需要实现基于Web版的网上报价查询系统.用户需求很简单就是客户通过登录网站后,可以对产品提交买卖价格,系统有个集中展示屏幕来展示10档最优买入和卖出价格.对于上述功能的实现无外乎有两种实现方式: 推送(Push)技术: 一种建立在服务器上的机制,由服务器主动将信息发往客户端的技术.Push技术的优势在于信息主动性和及时性. 拉(Pull)技术: 客户机主动请求信息,采用客户端定时刷新页面,可使用Ajax技术实现,每隔N秒自动Reload一次,如果在此期间Server端数据发生变化,客户

Exchge2010配置-为CAS服务器申请PKI证书

序:在Exchange 2007中,如果客户端使用的是Outlook,那么客户会以MAPI方式直接连接到邮箱服务器上,但如果使用的是其他方式访问邮箱,如POP3.OWA.IMAP4.Activesync等,他们是直接连接到客户端访问服务器,然后此服务器再将用户定位到邮箱服务器上.但在Exchange 2010中,所有的客户端访问请求都要连接到CAS服务器,经过身份验证之后,再通过代理转到相应的邮箱服务器. 那么客户端和CAS服务器通信的安全性就至关重要.默认Exchange2010安装完毕,使用

linux系统web日志分析脚本

linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照互联网上图文教程也无从下手.对于此情况我编写了一个web日志分析脚本,功能比较简单,无需配置,有需要的朋友可以再尝试一下.  脚本地址: gbk版(一般ssh客户端不用调整直接可用: wget http://jinxiang.oss-cn-hangzhou.aliyuncs.com/weblogch

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案 转载自http://www.cnblogs.com/chillsrc/archive/2013/01/30/2883648.html 说明:Plupload支持多种浏览器,多种上传方式! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序一样,一次选择多个文件进行批量上传.这样在某些应用上就显得很不人性化,有时候客户希

Web版的各种聊天工具

直到近期为止,我们经常使用的即时聊天工具(QQ.msn等)了Web版,大家不用下载庞大软件,直接打开网页就能够与自己的好友聊天,非常方便.在此将时汇总 ?????? 便于大家查找 ?????? 节约大家一点时间 此都是官方站点 ?????? 请大家放心使用: 1.先说我们最经常使用的QQ 在线聊天Web版地址: http://webqq.qq.com/ (刚建的 ?????? 现正在測试 ?????? 须要申请 ?????? 日前还不太稳定 ?????? 有待完好) 2.msn在线聊天Web版地

windows系统-web渗透工具-AWVS

windows系统-web渗透工具-AWVS ACUNETIX WEB VULNERABILITY SCANNER(AWVS) Awvs是一款很出名的web安全扫描器,属于windows系统平台下最流行的扫描器之一,是商业版本[有破解版],相对开源软件,较为细化.支持AJAX.JavaScript,对客户端的脚本代码支持,会更好,能更容易发现隐藏更深的URL地址等. 1.AcuSensor 灰盒测试[AWVS最大的特点其他扫描器不具备] #需服务端布置agent 发现爬网无法发现文件 额外的漏洞