Java를 사용하여 X.509 인증서 만들기

Muhammad Adil 2024년2월15일
Java를 사용하여 X.509 인증서 만들기

X.509는 공개 키 인증서의 형식을 정의하는 표준입니다. 온라인 통신, 디지털 서명 및 암호화를 보호하기 위해 SSL/TLS 인증서에 널리 사용됩니다.

이 기사에서는 Java를 사용하여 X.509 인증서를 생성하는 방법을 설명합니다.

요구 사항:

  1. 자바 개발 키트(JDK)
  2. Java용 Bouncy Castle Crypto API

Java를 사용하여 X.509 인증서를 만드는 단계

  • Bouncy Castle 암호화 API 다운로드

    Bouncy Castle Crypto API는 암호화 알고리즘의 Java 구현입니다. 보안 지원 Java 애플리케이션을 개발하는 데 사용할 수 있는 경량 암호화 API 모음을 제공합니다.

    Bouncy Castle Crypto API를 다운로드하려면 공식 웹 사이트로 이동하여 최신 버전을 다운로드하십시오.

  • Java 프로젝트에 Bouncy Castle Crypto API 추가

    Bouncy Castle Crypto API를 다운로드한 후 Java 프로젝트에 라이브러리를 추가합니다. 라이브러리는 빌드 시스템 또는 classpath에 종속성으로 추가될 수 있습니다.

  • 키 쌍 생성

    X.509 인증서를 생성하려면 키 쌍을 생성해야 합니다. 키 쌍은 개인 키와 공개 키로 구성됩니다.

    개인 키는 인증서 서명에 사용되고 공개 키는 서명 확인에 사용됩니다. KeyPairGenerator 클래스를 사용하여 Java에서 키 쌍을 생성할 수 있습니다.

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(2048);
    KeyPair keyPair = keyGen.generateKeyPair();
    
  • 자체 서명된 인증서 생성

    자체 서명된 인증서는 신뢰할 수 있는 제3자가 아닌 작성자가 서명한 인증서입니다. X509V3CertificateGenerator 클래스를 사용하여 Java에서 자체 서명된 인증서를 생성할 수 있습니다.

    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
    // Set the subject DN
    X500Principal dnName = new X500Principal("CN=Example");
    certGen.setSubjectDN(dnName);
    // Set the issuer DN
    certGen.setIssuerDN(dnName);
    // Set the public key
    certGen.setPublicKey(keyPair.getPublic());
    // Set the validity period
    certGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30));
    certGen.setNotAfter(new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 10));
    // Set the signature algorithm
    certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
    // Generate the certificate
    X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC");
    
  • 파일에 인증서 저장

    마지막으로 X.509 인증서 및 개인 키를 저장하기 위한 표준 형식인 PEM 형식의 파일에 인증서를 저장할 수 있습니다.

    FileOutputStream fos = new FileOutputStream("example.pem");
    fos.write("-----BEGIN CERTIFICATE-----\n".getBytes());
    fos.write(Base64.getEncoder().encode(cert.getEncoded()));
    fos.write("\n-----END CERTIFICATE-----\n".getBytes());
    fos.close();
    

    참고: 이 코드는 일부 패키지 때문에 온라인 컴파일러에서 실행할 수 없습니다. 이 예제를 프로젝트의 시작점으로 사용하고 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.

출력:

x509 인증서 생성 출력

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook