java,已知加密字符串,怎么生成cer文件?求代码

Python010

java,已知加密字符串,怎么生成cer文件?求代码,第1张

package com.tgtbj.dsf.certhelper

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,您需要创建一个证书请求,这个过程涉及到创建自己的私有密钥,以及相应的公开密钥,以及安装随着(电子邮件,网站等)的公共密钥这就是所谓的证书请求文件。