证书生成
public static void main(String[] args) throws Exception {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();System.out.println("Private Key (Base64): " + Base64.getEncoder().encodeToString(privateKey.getEncoded()));System.out.println("Public Key (Base64): " + Base64.getEncoder().encodeToString(publicKey.getEncoded()));X500Name subject = new X500Name("CN=localhosttt, O=demo1, L=City, ST=State, C=US");X500Name issuer = subject;BigInteger serialNumber = new BigInteger(64, new SecureRandom());Date notBefore = new Date(System.currentTimeMillis() - 10000);Date notAfter = new Date(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000);JcaX509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(issuer, serialNumber, notBefore, notAfter, subject, keyPair.getPublic());ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate());X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));KeyStore keyStore = KeyStore.getInstance("JKS");keyStore.load(null, null);keyStore.setCertificateEntry("mycert", cert);keyStore.setKeyEntry("mykey", keyPair.getPrivate(), "password".toCharArray(), new Certificate[]{cert});try (FileOutputStream fos = new FileOutputStream("keystore.jks")) {keyStore.store(fos, "password".toCharArray());}try (PEMWriter pemWriter = new PEMWriter(new FileWriter("certificate.crt"))) {pemWriter.writeObject(cert);}try (PEMWriter pemWriter = new PEMWriter(new FileWriter("private.key"))) {pemWriter.writeObject(keyPair.getPrivate());}try (FileOutputStream fos = new FileOutputStream("certificate.cer")) {fos.write(cert.getEncoded()); }
}
证书强制验证
在spring boot中强制验证证书,在application.yml中添加如下配置
server.port=
server.ssl.enabled=true
server.ssl.key-store=classpath:server.jks
server.ssl.key-store-password=your_password
server.ssl.trust-store=classpath:localhost.jks
server.ssl.trust-store-password=your_password
server.ssl.client-auth=need