⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 certdistservlet.java

📁 一个免费的CA,基于EJB平台的,老师叫我们测试,现把之共享出来让大家参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        } else {                            res.setContentLength(cert.length);                            res.getOutputStream().write(cert);                        }                        log.debug("Sent latest certificate for '"+dn+"' to client at " + remoteAddr);                    } else {                        log.debug("No certificate found for '"+dn+"'.");                        res.sendError(HttpServletResponse.SC_NOT_FOUND, "No certificate found for requested subject '"+dn+"'.");                    }                }                if (command.equalsIgnoreCase(COMMAND_LISTCERT)) {                    res.setContentType("text/html");                    PrintWriter pout = new PrintWriter(res.getOutputStream());                    printHtmlHeader("Certificates for "+dn, pout);                    for (int i=0;i<certs.length;i++) {                        Date notBefore = ((X509Certificate)certs[i]).getNotBefore();                        Date notAfter = ((X509Certificate)certs[i]).getNotAfter();                        String subject = CertTools.getSubjectDN((X509Certificate)certs[i]);                        String issuer = CertTools.getIssuerDN((X509Certificate)certs[i]);                        BigInteger serno = ((X509Certificate)certs[i]).getSerialNumber();                        pout.println("<pre>Subject:"+subject);                        pout.println("Issuer:"+issuer);                        pout.println("NotBefore:"+notBefore.toString());                        pout.println("NotAfter:"+notAfter.toString());                        pout.println("Serial number:"+serno.toString());                        pout.println("</pre>");                        pout.println("<a href=\"certdist?cmd=revoked&issuer="+URLEncoder.encode(issuer, "UTF-8")+"&serno="+serno.toString()+"\">Check if certificate is revoked</a>");                        pout.println("<hr>");                    }                    if (certs.length == 0) {                        pout.println("No certificates exists for '"+dn+"'.");                    }                    printHtmlFooter(pout);                    pout.close();                }            } catch (Exception e) {                log.debug("Error getting certificates for '"+dn+"' for "+remoteAddr+": ", e);                res.sendError(HttpServletResponse.SC_NOT_FOUND, "Error getting certificates.");                return;            }        } else if ((command.equalsIgnoreCase(COMMAND_NSCACERT) || command.equalsIgnoreCase(COMMAND_IECACERT) || command.equalsIgnoreCase(COMMAND_CACERT)) && ( issuerdn != null || caid != 0)) {            String lev = req.getParameter(LEVEL_PROPERTY);            int level = 0;            boolean pkcs7 = false;            if (lev != null)                level = Integer.parseInt(lev);            else                pkcs7 = true;            // CA is level 0, next over root level 1 etc etc, -1 returns chain as PKCS7            try {                ISignSessionLocal ss = getSignSession();                Certificate[] chain = null;                if(caid != 0) {				    chain = (Certificate[]) ss.getCertificateChain(administrator, caid).toArray(new Certificate[0]);                }                else {                    chain = (Certificate[]) ss.getCertificateChain(administrator, issuerdn.hashCode()).toArray(new Certificate[0]);                }                // chain.length-1 is last cert in chain (root CA)                if (chain.length < level) {                    PrintStream ps = new PrintStream(res.getOutputStream());                    ps.println("No CA certificate of level "+level+" exist.");                    log.debug("No CA certificate of level "+level+" exist.");                    return;                }                X509Certificate cacert = (X509Certificate)chain[level];                String filename=CertTools.getPartFromDN(CertTools.getSubjectDN(cacert), "CN");                if (filename == null)                    filename = "ca";                byte[] enccert = null;                if (pkcs7)                    enccert = ss.createPKCS7(administrator, cacert, true);                else                    enccert = cacert.getEncoded();                if (command.equalsIgnoreCase(COMMAND_NSCACERT)) {                    res.setContentType("application/x-x509-ca-cert");                    res.setContentLength(enccert.length);                    res.getOutputStream().write(enccert);                    log.debug("Sent CA cert to NS client, len="+enccert.length+".");                } else if (command.equalsIgnoreCase(COMMAND_IECACERT)) {                    // We must remove cache headers for IE                    ServletUtils.removeCacheHeaders(res);                    if (pkcs7)                        res.setHeader("Content-disposition", "attachment; filename=\""+filename+".p7c\"");                    else                        res.setHeader("Content-disposition", "attachment; filename=\""+filename+".crt\"");                    res.setContentType("application/octet-stream");                    res.setContentLength(enccert.length);                    res.getOutputStream().write(enccert);                    log.debug("Sent CA cert to IE client, len="+enccert.length+".");                } else if (command.equalsIgnoreCase(COMMAND_CACERT)) {                    byte[] b64cert = Base64.encode(enccert);                    String out;                    if (pkcs7)                        out = "-----BEGIN PKCS7-----\n";                    else                        out = "-----BEGIN CERTIFICATE-----\n";                    out += new String(b64cert);                    if (pkcs7)                        out += "\n-----END PKCS7-----\n";                    else                        out += "\n-----END CERTIFICATE-----\n";                    // We must remove cache headers for IE                    ServletUtils.removeCacheHeaders(res);                    res.setHeader("Content-disposition", "attachment; filename=\""+filename+".pem\"");                    res.setContentType("application/octet-stream");                    res.setContentLength(out.length());                    res.getOutputStream().write(out.getBytes());                    log.debug("Sent CA cert to client, len="+out.length()+".");                } else {                    res.setContentType("text/plain");                    res.getOutputStream().println("Commands="+COMMAND_NSCACERT+" || "+COMMAND_IECACERT+" || "+COMMAND_CACERT);                    return;                }            } catch (Exception e) {                log.debug("Error getting CA certificates: ", e);                res.sendError(HttpServletResponse.SC_NOT_FOUND, "Error getting CA certificates.");                return;            }        } else if ((command.equalsIgnoreCase(COMMAND_NSOCSPCERT) || command.equalsIgnoreCase(COMMAND_IEOCSPCERT) || command.equalsIgnoreCase(COMMAND_OCSPCERT)) && ( issuerdn != null || caid != 0)) {            try {                ICAAdminSessionLocal casession = getCASession();                CAInfo cainfo = null;                if(caid != 0) {                    cainfo = casession.getCAInfo(administrator, caid);                } else {                    int id = issuerdn.hashCode();                    cainfo = casession.getCAInfo(administrator, id);                }                X509Certificate ocspcert = null;                Iterator iter = cainfo.getExtendedCAServiceInfos().iterator();                while(iter.hasNext()){                  ExtendedCAServiceInfo next = (ExtendedCAServiceInfo) iter.next();                  if(next instanceof OCSPCAServiceInfo){                    if(((OCSPCAServiceInfo) next).getOCSPSignerCertificatePath() != null)                      ocspcert = (X509Certificate) ((OCSPCAServiceInfo) next).getOCSPSignerCertificatePath().get(0);                            }                }                // If no cert, send back a NOT_FOUND response                if (ocspcert == null) {                    res.sendError(HttpServletResponse.SC_NOT_FOUND, "No OCSP certificate found for CA.");                    return;                }                String filename=CertTools.getPartFromDN(CertTools.getSubjectDN(ocspcert), "CN");                if (filename == null)                    filename = "ocsp";                byte[] enccert = null;                enccert = ocspcert.getEncoded();                if (command.equalsIgnoreCase(COMMAND_NSOCSPCERT)) {                    res.setContentType("application/x-x509-ca-cert");                    res.setContentLength(enccert.length);                    res.getOutputStream().write(enccert);                    log.debug("Sent OCSP cert to NS client, len="+enccert.length+".");                } else if (command.equalsIgnoreCase(COMMAND_IEOCSPCERT)) {                    // We must remove cache headers for IE                    ServletUtils.removeCacheHeaders(res);                    res.setHeader("Content-disposition", "attachment; filename=\""+filename+".crt\"");                    res.setContentType("application/octet-stream");                    res.setContentLength(enccert.length);                    res.getOutputStream().write(enccert);                    log.debug("Sent OCSP cert to IE client, len="+enccert.length+".");                } else if (command.equalsIgnoreCase(COMMAND_OCSPCERT)) {                    byte[] b64cert = Base64.encode(enccert);                    String out;                    out = "-----BEGIN CERTIFICATE-----\n";                    out += new String(b64cert);                    out += "\n-----END CERTIFICATE-----\n";                    // We must remove cache headers for IE                    ServletUtils.removeCacheHeaders(res);                    res.setHeader("Content-disposition", "attachment; filename=\""+filename+".pem\"");                    res.setContentType("application/octet-stream");                    res.setContentLength(out.length());                    res.getOutputStream().write(out.getBytes());                    log.debug("Sent OCSP cert to client, len="+out.length()+".");            } else {                res.setContentType("text/plain");                res.getOutputStream().println("Commands="+COMMAND_NSCACERT+" || "+COMMAND_IECACERT+" || "+COMMAND_CACERT);                return;            }            } catch (Exception e) {                log.debug("Error getting OCSP certificate for CA: ", e);                res.sendError(HttpServletResponse.SC_NOT_FOUND, "Error getting OCSP certificate for CA.");                return;            }        } else if (command.equalsIgnoreCase(COMMAND_REVOKED)) {            String dn = req.getParameter(ISSUER_PROPERTY);            if (dn == null) {                log.debug("Bad request, no 'issuer' arg to 'revoked' command.");                res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Usage command=revoked?issuer=<issuerdn>&serno=<serialnumber>.");                return;            }            String serno = req.getParameter(SERNO_PROPERTY);            if (serno == null) {                log.debug("Bad request, no 'serno' arg to 'revoked' command.");                res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Usage command=revoked?issuer=<issuerdn>&serno=<serialnumber>.");                return;            }            log.debug("Looking for certificate for '"+dn+"' and serno='"+serno+"'.");            try {                ICertificateStoreSessionLocal store = getStoreSession();                RevokedCertInfo revinfo = store.isRevoked(administrator, dn, new BigInteger(serno));                PrintWriter pout = new PrintWriter(res.getOutputStream());                res.setContentType("text/html");                printHtmlHeader("Check revocation", pout);                if (revinfo != null) {                    if (revinfo.getReason() == RevokedCertInfo.NOT_REVOKED) {                        pout.println("<h1>NOT REVOKED</h1>");                        pout.println("Certificate with issuer '"+dn+"' and serial number '"+serno+"' is NOT revoked.");                    } else {                        pout.println("<h1>REVOKED</h1>");                        pout.println("Certificate with issuer '"+dn+"' and serial number '"+serno+"' is revoked.");                        pout.println("RevocationDate is '"+revinfo.getRevocationDate()+"' and reason '"+revinfo.getReason()+"'.");                    }                } else {                    pout.println("<h1>CERTIFICATE DOES NOT EXIST</h1>");                    pout.println("Certificate with issuer '"+dn+"' and serial number '"+serno+"' does not exist.");                }                printHtmlFooter(pout);                pout.close();            } catch (Exception e) {                log.debug("Error checking revocation for '"+dn+"' with serno '"+serno+"': ", e);                res.sendError(HttpServletResponse.SC_NOT_FOUND, "Error checking revocation.");                return;            }        } else {            res.sendError(HttpServletResponse.SC_BAD_REQUEST, "Commands=cacert | lastcert | listcerts | crl | revoked && issuer=<issuerdn>");            return;        }    } // doGet        private void printHtmlHeader(String title, PrintWriter pout) {                pout.println("<html><head>");                pout.println("<title>"+title+"</title>");                pout.println("<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">");                pout.println("<META HTTP-EQUIV=\"Expires\" CONTENT=\"-1\">");                pout.println("</head>");                pout.println("<body><p>");    }    private void printHtmlFooter(PrintWriter pout) {                pout.println("</body>");                pout.println("<head>");                pout.println("<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">");                pout.println("<META HTTP-EQUIV=\"Expires\" CONTENT=\"-1\">");                pout.println("</head>");                pout.println("</html>");    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -