Java를 사용하여 X.509 인증서 만들기
X.509는 공개 키 인증서의 형식을 정의하는 표준입니다. 온라인 통신, 디지털 서명 및 암호화를 보호하기 위해 SSL/TLS 인증서에 널리 사용됩니다.
이 기사에서는 Java를 사용하여 X.509 인증서를 생성하는 방법을 설명합니다.
요구 사항:
- 자바 개발 키트(JDK)
- 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();
참고: 이 코드는 일부 패키지 때문에 온라인 컴파일러에서 실행할 수 없습니다. 이 예제를 프로젝트의 시작점으로 사용하고 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.
출력:
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