证书注册流程是什么?

我正在寻找注册证书的过程。

我已经搜索了很多,但没有找到一个好的答案。到现在为止,我首先要生成一个密钥库(用于创建公共密钥和私有密钥),然后应该保留私有密钥,并将公共密钥与其他信息(如名称和组织)一起发送给CA。然后,CA将生成一些东西,并且还给我一些包含公钥和信息的东西。

CA生成什么?什么是P12文件,.cer文件包含什么?

回答:

在公钥基础结构中颁发证书的一般过程大致如下:

  1. 客户生成私钥和公钥

  2. 客户端生成一个CSR(证书签名请求),其中包括诸如Common Name和Public Key之类的属性。使用私钥对其进行签名并将其发送到服务器

  3. 服务器使用CSR数据构建X509证书,使用CA私钥对其进行签名,然后将X509返回给客户端

  4. 客户端将私钥和证书存储在KeyStore中

CA生成什么?

x509证书

什么是P12文件

包含密钥库的PKCS#12格式(.pfx或.p12)的文件

什么是.cer文件包含

DER或PEM格式的证书的公共部分(非私钥)

回答:

compile 'com.madgag.spongycastle:core:1.51.0.0'

compile 'com.madgag.spongycastle:pkix:1.51.0.0'

//Generate KeyPair

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

keyGen.initialize(KEY_SIZE, new SecureRandom());

KeyPair keyPair = keyGen.generateKeyPair();

//Generate CSR in PKCS#10 format encoded in DER

PKCS10CertificationRequest csr = CsrHelper.generateCSR(keyPair, commonname);

byte CSRder[] = csr.getEncoded();

public class CsrHelper {

private final static String DEFAULT_SIGNATURE_ALGORITHM = "SHA256withRSA";

private final static String CN_PATTERN = "CN=%s, O=Aralink, OU=OrgUnit";

private static class JCESigner implements ContentSigner {

private static Map<String, AlgorithmIdentifier> ALGOS = new HashMap<String, AlgorithmIdentifier>();

static {

ALGOS.put("SHA256withRSA".toLowerCase(), new AlgorithmIdentifier(

new ASN1ObjectIdentifier("1.2.840.113549.1.1.11")));

ALGOS.put("SHA1withRSA".toLowerCase(), new AlgorithmIdentifier(

new ASN1ObjectIdentifier("1.2.840.113549.1.1.5")));

}

private String mAlgo;

private Signature signature;

private ByteArrayOutputStream outputStream;

public JCESigner(PrivateKey privateKey, String sigAlgo) {

//Utils.throwIfNull(privateKey, sigAlgo);

mAlgo = sigAlgo.toLowerCase();

try {

this.outputStream = new ByteArrayOutputStream();

this.signature = Signature.getInstance(sigAlgo);

this.signature.initSign(privateKey);

} catch (GeneralSecurityException gse) {

throw new IllegalArgumentException(gse.getMessage());

}

}

@Override

public AlgorithmIdentifier getAlgorithmIdentifier() {

AlgorithmIdentifier id = ALGOS.get(mAlgo);

if (id == null) {

throw new IllegalArgumentException("Does not support algo: " +

mAlgo);

}

return id;

}

@Override

public OutputStream getOutputStream() {

return outputStream;

}

@Override

public byte[] getSignature() {

try {

signature.update(outputStream.toByteArray());

return signature.sign();

} catch (GeneralSecurityException gse) {

gse.printStackTrace();

return null;

}

}

}

//Create the certificate signing request (CSR) from private and public keys

public static PKCS10CertificationRequest generateCSR(KeyPair keyPair, String cn) throws IOException,

OperatorCreationException {

String principal = String.format(CN_PATTERN, cn);

ContentSigner signer = new JCESigner (keyPair.getPrivate(),DEFAULT_SIGNATURE_ALGORITHM);

PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(

new X500Name(principal), keyPair.getPublic());

ExtensionsGenerator extensionsGenerator = new ExtensionsGenerator();

extensionsGenerator.addExtension(Extension.basicConstraints, true, new BasicConstraints(

true));

csrBuilder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest,

extensionsGenerator.generate());

PKCS10CertificationRequest csr = csrBuilder.build(signer);

return csr;

}

}

以上是 证书注册流程是什么? 的全部内容, 来源链接: utcz.com/qa/417916.html

回到顶部