码迷,mamicode.com
首页 > Web开发 > 详细

PKI证书签发系统(web版)

时间:2016-07-15 11:09:02      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

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

}

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

PKI证书签发系统(web版)

标签:

原文地址:http://blog.csdn.net/baidu_23086307/article/details/51912917

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!