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

📄 certreqservlet.java

📁 一个免费的CA,基于EJB平台的,老师叫我们测试,现把之共享出来让大家参考
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    } // sendOpenVPNToken        private void sendP12Token(KeyStore ks, String username, String kspassword,        HttpServletResponse out) throws Exception {        ByteArrayOutputStream buffer = new ByteArrayOutputStream();        ks.store(buffer, kspassword.toCharArray());        out.setContentType("application/x-pkcs12");        out.setHeader("Content-disposition", "filename=" + username + ".p12");        out.setContentLength(buffer.size());        buffer.writeTo(out.getOutputStream());        out.flushBuffer();        buffer.close();    }    private void sendJKSToken(KeyStore ks, String username, String kspassword,        HttpServletResponse out) throws Exception {        ByteArrayOutputStream buffer = new ByteArrayOutputStream();        ks.store(buffer, kspassword.toCharArray());        out.setContentType("application/octet-stream");        out.setHeader("Content-disposition", "filename=" + username + ".jks");        out.setContentLength(buffer.size());        buffer.writeTo(out.getOutputStream());        out.flushBuffer();        buffer.close();    }    private void sendPEMTokens(KeyStore ks, String username, String kspassword,        HttpServletResponse out) throws Exception {        ByteArrayOutputStream buffer = new ByteArrayOutputStream();        String alias = "";        // Find the key private key entry in the keystore        Enumeration e = ks.aliases();        Object o = null;        PrivateKey serverPrivKey = null;        while (e.hasMoreElements()) {            o = e.nextElement();            if (o instanceof String) {                if ((ks.isKeyEntry((String) o)) &&                        ((serverPrivKey = (PrivateKey) ks.getKey((String) o,                                kspassword.toCharArray())) != null)) {                    alias = (String) o;                    break;                }            }        }        byte[] privKeyEncoded = "".getBytes();        if (serverPrivKey != null) {            privKeyEncoded = serverPrivKey.getEncoded();        }        //Certificate chain[] = ks.getCertificateChain((String) o);        Certificate[] chain = KeyTools.getCertChain(ks, (String) o);        X509Certificate userX509Certificate = (X509Certificate) chain[0];        byte[] output = userX509Certificate.getEncoded();        String sn = CertTools.getSubjectDN(userX509Certificate);        String subjectdnpem = sn.replace(',', '/');        String issuerdnpem = CertTools.getIssuerDN(userX509Certificate).replace(',', '/');        buffer.write(bagattributes);        buffer.write(friendlyname);        buffer.write(alias.getBytes());        buffer.write(NL);        buffer.write(beginPrivateKey);        buffer.write(NL);        byte[] privKey = Base64.encode(privKeyEncoded);        buffer.write(privKey);        buffer.write(NL);        buffer.write(endPrivateKey);        buffer.write(NL);        buffer.write(bagattributes);        buffer.write(friendlyname);        buffer.write(alias.getBytes());        buffer.write(NL);        buffer.write(subject);        buffer.write(subjectdnpem.getBytes());        buffer.write(NL);        buffer.write(issuer);        buffer.write(issuerdnpem.getBytes());        buffer.write(NL);        buffer.write(beginCertificate);        buffer.write(NL);        byte[] userCertB64 = Base64.encode(output);        buffer.write(userCertB64);        buffer.write(NL);        buffer.write(endCertificate);        buffer.write(NL);        if (CertTools.isSelfSigned(userX509Certificate)) {        } else {            for (int num = 1; num < chain.length; num++) {                X509Certificate tmpX509Cert = (X509Certificate) chain[num];                sn = CertTools.getSubjectDN(tmpX509Cert);                String cn = CertTools.getPartFromDN(sn, "CN");                if (StringUtils.isEmpty(cn)) {                	cn="Unknown";                }                subjectdnpem = sn.replace(',', '/');                issuerdnpem = CertTools.getIssuerDN(tmpX509Cert).replace(',', '/');                buffer.write(bagattributes);                buffer.write(friendlyname);                buffer.write(cn.getBytes());                buffer.write(NL);                buffer.write(subject);                buffer.write(subjectdnpem.getBytes());                buffer.write(NL);                buffer.write(issuer);                buffer.write(issuerdnpem.getBytes());                buffer.write(NL);                byte[] tmpOutput = tmpX509Cert.getEncoded();                buffer.write(beginCertificate);                buffer.write(NL);                byte[] tmpCACertB64 = Base64.encode(tmpOutput);                buffer.write(tmpCACertB64);                buffer.write(NL);                buffer.write(endCertificate);                buffer.write(NL);            }        }        out.setContentType("application/octet-stream");        out.setHeader("Content-disposition", " attachment; filename=" + username + ".pem");        buffer.writeTo(out.getOutputStream());        out.flushBuffer();        buffer.close();    }    private KeyStore generateToken(Admin administrator, String username, String password, int caid, String keylength, String keyalg, boolean createJKS,     		                       boolean loadkeys, boolean savekeys, int endEntityProfileId)       throws Exception{    	    	         KeyRecoveryData keyData = null;         KeyPair rsaKeys = null;         boolean reusecertificate = false;         if(loadkeys){        	            IRaAdminSessionRemote raadminsession = raadminhome.create();           EndEntityProfile endEntityProfile = raadminsession.getEndEntityProfile(administrator, endEntityProfileId);           reusecertificate = endEntityProfile.getReUseKeyRevoceredCertificate();        	            // used saved keys.           IKeyRecoverySessionRemote keyrecoverysession = keyrecoveryhome.create();           keyData = keyrecoverysession.keyRecovery(administrator, username, endEntityProfileId);           rsaKeys = keyData.getKeyPair();                      if(reusecertificate){        	   keyrecoverysession.unmarkUser(administrator,username);           }         }         else{           // generate new keys.           rsaKeys = KeyTools.genKeys(keylength, keyalg);         }                  ISignSessionLocal signsession = getSignSession();         X509Certificate cert = null;         if(reusecertificate){        	 cert = (X509Certificate) keyData.getCertificate();             ICAAdminSessionLocal caadminsession = getCASession();             boolean finishUser = caadminsession.getCAInfo(administrator,caid).getFinishUser();             if(finishUser){           	  IAuthenticationSessionRemote authsession = authhome.create();           	  authsession.finishUser(administrator, username, password);             }        	          }else{        	              cert = (X509Certificate)signsession.createCertificate(administrator, username, password, rsaKeys.getPublic());	          }        // Make a certificate chain from the certificate and the CA-certificate        Certificate[] cachain = (Certificate[]) signsession.getCertificateChain(administrator, caid).toArray(new Certificate[0]);        // Verify CA-certificate        if (CertTools.isSelfSigned((X509Certificate) cachain[cachain.length - 1])) {            try {                cachain[cachain.length - 1].verify(cachain[cachain.length - 1].getPublicKey());            } catch (GeneralSecurityException se) {                throw new Exception("RootCA certificate does not verify");            }        } else {            throw new Exception("RootCA certificate not self-signed");        }        // Verify that the user-certificate is signed by our CA        try {            cert.verify(cachain[0].getPublicKey());        } catch (GeneralSecurityException se) {            throw new Exception("Generated certificate does not verify using CA-certificate.");        }        if (savekeys) {            // Save generated keys to database.            IKeyRecoverySessionRemote keyrecoverysession = keyrecoveryhome.create();            keyrecoverysession.addKeyRecoveryData(administrator, cert, username, rsaKeys);        }        // Use CN if as alias in the keystore, if CN is not present use username        String alias = CertTools.getPartFromDN(CertTools.getSubjectDN(cert), "CN");        if (alias == null) alias = username;        // Store keys and certificates in keystore.        KeyStore ks = null;        if (createJKS) {            ks = KeyTools.createJKS(alias, rsaKeys.getPrivate(), password, cert, cachain);        } else {            ks = KeyTools.createP12(alias, rsaKeys.getPrivate(), cert, cachain);        }        return ks;    }}// CertReqServlet

⌨️ 快捷键说明

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