javax.security.auth.x500


1. Verifying a Certificate Chain

import javax.security.auth.x500.X500Principal;
import javax.security.auth.x500.X509Certificate;

public class VerifyCertificateChain {

    public static void main(String[] args) {
        // Create a certificate chain
        X509Certificate[] chain = new X509Certificate[3];
        ...

        // Get the root certificate from the chain
        X500Principal rootCertSubject = chain[0].getSubjectX500Principal();

        // Create a trust store containing the root certificate
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(null, null);
        ks.setCertificateEntry("rootCert", chain[0]);

        // Create a trust manager factory
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
        tmf.init(ks);

        // Create a trust manager
        TrustManager[] trustManagers = tmf.getTrustManagers();

        // Create an SSL context using the trust manager
        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, trustManagers, null);

        // Create an SSL socket factory using the SSL context
        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

        // Connect to a server and verify the certificate chain
        SSLSocket socket = (SSLSocket) sslSocketFactory.createSocket();
        socket.connect(new InetSocketAddress("example.com", 443));
        X509Certificate[] serverCertificates = socket.getSession().getPeerCertificates();

        // Verify the certificate chain using the root certificate
        X509Chain chainVerifier = X509Chain.getInstance("X.509");
        chainVerifier.init(true, rootCertSubject, trustManagers);
        chainVerifier.verify(serverCertificates);
    }
}

2. Generating a Self-Signed Certificate

3. Extracting Certificate Information

4. Using a KeyStore to Manage Certificates

5. Using a Certificate Authority (CA)

6. Using a Certificate Transparency Log

7. Using a Certificate Revocation List (CRL)