mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
124 lines
5.1 KiB
Java
124 lines
5.1 KiB
Java
package minsecurity.certificate.x509;
|
|
|
|
import minsecurity.Common;
|
|
import minsecurity.certificate.X509.X509CertMaker;
|
|
import minsecurity.certificate.X509.X509CertUtil;
|
|
import minsecurity.crypto.sm2.SM2Base;
|
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
|
|
import org.bouncycastle.util.io.pem.PemObject;
|
|
import org.bouncycastle.util.io.pem.PemWriter;
|
|
import org.junit.Test;
|
|
import static org.junit.Assert.*;
|
|
import org.slf4j.LoggerFactory;
|
|
import util.FileUtil;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.IOException;
|
|
import java.io.StringWriter;
|
|
import java.security.*;
|
|
import java.security.cert.CertificateException;
|
|
import java.security.cert.CertificateFactory;
|
|
import java.security.cert.X509Certificate;
|
|
import java.security.spec.PKCS8EncodedKeySpec;
|
|
|
|
import static minsecurity.certificate.X509.X509CertMaker.makeRootCA;
|
|
|
|
/*
|
|
* @Author: hongyu guo
|
|
* @Description:
|
|
* @Version: 1.0.0
|
|
* @Date: 22:55 2021/03/04
|
|
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
|
*/
|
|
public class TestX509 {
|
|
|
|
// WARNING: X509不需要测试!!!!!!!
|
|
// WARNING: X509不需要测试!!!!!!!
|
|
// WARNING: X509不需要测试!!!!!!!
|
|
// WARNING: X509不需要测试!!!!!!!
|
|
// WARNING: X509不需要测试!!!!!!!
|
|
|
|
|
|
static {
|
|
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
|
|
}
|
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TestX509.class);
|
|
private static final Provider BC = new BouncyCastleProvider();
|
|
|
|
@Test
|
|
public void testRebuildKeyPair(){
|
|
try {
|
|
|
|
KeyPair rootKP = SM2Base.generateKeyPair();
|
|
X509Certificate rootCA = makeRootCA(rootKP,"CN","MIN",
|
|
"MIN-GROUP","MIN ROOT CA",
|
|
365L * 24 * 60 * 60 * 1000, "SM3withSM2");
|
|
FileUtil.writeFile("./target/root.cer",rootCA.getEncoded());
|
|
FileUtil.writeFile("./target/root.priv",rootKP.getPrivate().getEncoded());
|
|
rootCA.verify(rootKP.getPublic());
|
|
|
|
System.out.println(rootKP.getPrivate().getFormat());
|
|
CertificateFactory fact = CertificateFactory.getInstance(Common.X509, Common.BC_NAME);
|
|
X509Certificate cert =
|
|
(X509Certificate) fact.generateCertificate(
|
|
new ByteArrayInputStream(rootCA.getEncoded()));
|
|
|
|
PublicKey publicKey = cert.getPublicKey();
|
|
KeyFactory keyFac = KeyFactory.getInstance("EC", BouncyCastleProvider.PROVIDER_NAME);
|
|
byte[] privBytes = FileUtil.readFile("./target/root.priv");
|
|
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privBytes);
|
|
PrivateKey privateKey = keyFac.generatePrivate(keySpec);
|
|
KeyPair rootKeyPair = new KeyPair(publicKey, privateKey);
|
|
|
|
logger.debug("origin: {}", ByteUtils.toHexString(rootKP.getPrivate().getEncoded()));
|
|
logger.debug("rebuild:{}", ByteUtils.toHexString(rootKeyPair.getPrivate().getEncoded()));
|
|
|
|
logger.debug("origin: {}", ByteUtils.toHexString(rootKP.getPublic().getEncoded()));
|
|
logger.debug("rebuild:{}", ByteUtils.toHexString(rootKeyPair.getPublic().getEncoded()));
|
|
|
|
KeyPair subKeyPair = SM2Base.generateKeyPair();
|
|
X509Certificate subCert =
|
|
X509CertMaker.makeSubCACert(rootKeyPair,
|
|
cert,
|
|
subKeyPair,
|
|
"c","o","ou","cn",
|
|
365L * 24 * 60 * 60 * 1000,
|
|
"SM3withSM2");
|
|
FileUtil.writeFile("./target/sub.cer",subCert.getEncoded());
|
|
|
|
subCert.verify(rootKeyPair.getPublic());
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
public void testVerify() throws IOException, CertificateException, NoSuchProviderException {
|
|
// 保存在本地的已有证书
|
|
byte[] bytesOfCert = FileUtil.readFile("./target/root.cer");
|
|
CertificateFactory fact = CertificateFactory.getInstance(Common.X509, "BC");
|
|
X509Certificate cert =
|
|
(X509Certificate) fact.generateCertificate(
|
|
new ByteArrayInputStream(bytesOfCert));
|
|
assertFalse(X509CertUtil.isExpired(cert));
|
|
assertTrue(X509CertUtil.isValid(cert,cert.getPublicKey()));
|
|
}
|
|
|
|
@Test
|
|
public void testX509toPem() throws IOException, CertificateException, NoSuchProviderException {
|
|
byte[] bytesOfCert = FileUtil.readFile("./target/root.cer");
|
|
CertificateFactory fact = CertificateFactory.getInstance(Common.X509, "BC");
|
|
X509Certificate cert =
|
|
(X509Certificate) fact.generateCertificate(
|
|
new ByteArrayInputStream(bytesOfCert));
|
|
StringWriter sw = new StringWriter();
|
|
PemObject pemCSR = new PemObject("CERTIFICATE REQUEST", cert.getEncoded());
|
|
PemWriter pemWriter = new PemWriter(sw);
|
|
pemWriter.writeObject(pemCSR);
|
|
pemWriter.close();
|
|
logger.debug(sw.toString());
|
|
}
|
|
}
|