2013-04-21 77 views
0

我正在使用彈性城堡庫創建PKCS10根證書。未能通過JSP生成根證書

因此,我用進口(RootCertGenerator.java),它是在純Java環境中正常工作的充氣城堡庫(所有我與RootCertGenerator.java被修改main()方法來執行完成的(),,重命名該方法)

但是,在執行generateRooteCert.jsp之後,它會顯示如頁面底部所示的tomcat錯誤。有人說它可以通過在構建路徑中包含mail.jar來解決,但它不起作用。

--- generateRooteCert.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"%> 
<%@ page import="java.sql.DriverManager" %> 
<%@ page import="java.sql.Connection" %> 
<%@ page import="java.sql.PreparedStatement" %> 
<%@ page import="java.sql.Statement" %> 
<%@ page import="java.sql.SQLException" %> 
<%@ page import="java.sql.ResultSet" %> 
<%@ page import="myPackage.Utils" %> 
<%@ page import="myPackage.RootCertGenerator" %> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> 
<title>Make root Certificate</title> 
</head> 
<% 
RootCertGenerator.execute(); 
%> 
<body> 

</body> 
</html> 

---RootCertGenerator.java 包mypackage的;

import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.OutputStreamWriter; 
import java.math.BigInteger; 
import java.security.*; 
import java.security.cert.X509Certificate; 
import java.util.Date; 
import javax.security.auth.x500.X500Principal; 
import org.bouncycastle.openssl.PEMWriter; 
import org.bouncycastle.x509.X509V1CertificateGenerator; 

public class RootCertGenerator 
{ 
public static X509Certificate generateV1Certificate(KeyPair pair) 
throws InvalidKeyException, NoSuchProviderException, SignatureException 
{ 
// generate the certificate 
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); 
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis())); 
certGen.setIssuerDN(new X500Principal("CN=Test Certificate")); 
certGen.setNotBefore(new Date(System.currentTimeMillis() - (7 * 24 * 60 * 60 * 1000))); 
certGen.setNotAfter(new Date(System.currentTimeMillis() + (7 * 24 * 60 * 60 * 1000))); 
certGen.setSubjectDN(new X500Principal("CN=Test Certificate")); 
certGen.setPublicKey(pair.getPublic()); 
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption"); 
return certGen.generateX509Certificate(pair.getPrivate(), "BC"); 
} 

//////////added by jeon 
public static void pemEncodeToFile(String filename, Object obj, char[] password) throws 
Exception{ 
PEMWriter pw = new PEMWriter(new FileWriter(filename)); 
if (password != null && password.length > 0) { 
pw.writeObject(obj, "DESEDE", password, new SecureRandom()); 
} else { 
pw.writeObject(obj); 
} 
pw.flush(); 
pw.close(); 
} 
//////////added by jeon 

public static void execute() throws Exception 
{ 
// create the keys 
KeyPair   pair = Utils.generateRSAKeyPair(); 

////////////////////writing root certificate 
PEMWriter pemWrt = new PEMWriter(new OutputStreamWriter(System.out)); 
pemWrt.writeObject(cert); 
pemEncodeToFile("rootCertificate.cer", cert, null); 
pemWrt.flush(); 
pemWrt.close(); 
/////////////////writing private key 
PEMWriter pemWrt1 = new PEMWriter(new OutputStreamWriter(System.out)); 
pemWrt1.writeObject(pair.getPrivate()); 
pemEncodeToFile("rootPrivate.key", pair.getPrivate(), null); 
pemWrt1.flush(); 
pemWrt1.close(); 

/////////////////writing public key 
PEMWriter pemWrt2 = new PEMWriter(new OutputStreamWriter(System.out)); 
pemWrt2.writeObject(pair.getPublic()); 
pemEncodeToFile("rootPublic.key", pair.getPublic(), null); 
pemWrt2.flush(); 
pemWrt2.close(); 
// show some basic validation 
cert.checkValidity(new Date()); 
cert.verify(cert.getPublicKey());   
System.out.println("valid certificate generated"); 
} 
} 

和錯誤消息是

org.apache.jasper.JasperException: 
javax.servlet.ServletException: 
java.security.NoSuchProviderException: no such provider: BC 

我覺得TOMCAT無法加載BouncyCastle的供應商,即使我的系統

/jre/lib/security/java.security包含bouncycaslte信息。

我該怎麼辦?

回答