import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.math.BigInteger
import java.security.KeyPair
import java.security.KeyPairGenerator
import java.security.KeyStore
import java.security.cert.Certificate
import java.security.cert.CertificateEncodingException
import java.security.cert.X509Certificate
import java.util.Date
import javax.security.auth.x500.X500Principal
import org.bouncycastle.x509.X509V3CertificateGenerator
public class TT {
public static void genCertFile(String certPath, String password,
int keysize, String algorithm) throws Exception {
// 创建KeyStore
KeyStore store = KeyStore.getInstance("PKCS12")
store.load(null, null)
// 生成一对公私钥,这部分如果自己已经有了PublicKey,可以直接在下面使用,不用生成
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA")
kpg.initialize(keysize)
KeyPair keyPair = kpg.generateKeyPair()
// 这个字符串根据自己情况填
String issuer = "C=CN,ST=BJ,L=BJ,O=SSS,OU=SC,CN=SSS"
String subject = issuer
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator()
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()))
certGen.setIssuerDN(new X500Principal(issuer))
certGen.setNotBefore(new Date(System.currentTimeMillis() - 10 * 365
* 24 * 60 * 60 * 1000))
certGen.setNotAfter(new Date(System.currentTimeMillis() + 10 * 365 * 24
* 60 * 60 * 1000))
certGen.setSubjectDN(new X500Principal(subject))
certGen.setPublicKey(keyPair.getPublic())// 此处可直接传入线程的PublicKey
if (algorithm == null || algorithm.equals("")) {
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption")
} else {
certGen.setSignatureAlgorithm(algorithm)
}
X509Certificate cert = certGen.generateX509Certificate(keyPair
.getPrivate())
// 私钥有现成的也可直接传入
store.setKeyEntry("alias", keyPair.getPrivate(),
password.toCharArray(), new Certificate[] { cert })
// 导出为 cer 证书
try {
FileOutputStream fos = new FileOutputStream(certPath + ".cer")
fos.write(cert.getEncoded())
fos.close()
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (CertificateEncodingException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
}
public static void main(String args[]) throws Exception {
genCertFile("D:/opop1", "qwafrt", 1024, "SHA1WithRSA")
}
}
1. 如果你想验证你所需要的私钥。有没有其他的选项。 证书是有额外的属性(国家,...)是由证书颁发机构garants的附加属性为true签名的公钥。CER文件证书和没有私钥。私钥设置有。PFX密钥库正常文件。 如果你真的是验证你已经导入了私钥。
你通常可以导入。与任何问题的CER证书 密钥工具-importcert文件certificate.cer-密钥库的keystore.jks别名“别名”
2. 你已经有了该证书可能是服务器的证书,或签名服务器的证书。你会需要它,使您的Web服务客户端端可以验证服务器。 但是,如果你还需要使用SSL进行客户端端身份验证,那么你需要让自己的证书,来验证您的Web服务客户端端。
为此 CodeGo.net,您需要创建一个证书请求,这个过程涉及到创建自己的私有密钥,以及相应的公开密钥,以及安装随着(电子邮件,网站等)的公共密钥这就是所谓的证书请求文件。