X509Certificate 클래스

아현·2024년 11월 19일
1

Java

목록 보기
13/13

X509Certificate 클래스


X509Certificate는 Java 보안 API에서 제공하는 클래스 중 하나로, X.509 표준을 따르는 디지털 인증서를 나타냅니다. X.509는 공통적인 디지털 인증서 표준으로 주로 공개 키 기반(PKI) 인프라에서 사용됩니다. 이 클래스는 인증서의 소유자 정보, 발급자 정보, 공개 키, 유효 기간 등의 다양한 속성을 포함하고 있습니다.



개요


  • 패키지: java.security.cert

  • 용도: X.509 표준 인증서를 나타내며, 주로 SSL/TLS 연결, 인증서 기반 인증 및 전자 서명 검증에 사용됩니다.

  • 상속 계층:

    • java.lang.Object
    • java.security.cert.Certificate
    • java.security.cert.X509Certificate



주요 메서드


  • getIssuerDN(): 인증서 발급자의 DN(Distinguished Name)을 반환합니다.

  • getSubjectDN(): 인증서 소유자의 DN(Distinguished Name)을 반환합니다.

  • getNotBefore(): 인증서의 유효 시작 날짜를 반환합니다.

  • getNotAfter(): 인증서의 유효 종료 날짜를 반환합니다.

  • checkValidity(): 현재 시간 기준으로 인증서의 유효성을 검사합니다. 인증서가 유효하지 않으면 예외를 던집니다.

  • checkValidity(Date date): 지정된 날짜 기준으로 인증서의 유효성을 검사합니다.

  • getSerialNumber(): 인증서의 일련 번호를 반환합니다.

  • getSigAlgName(): 인증서 서명 알고리즘의 이름을 반환합니다.

  • getPublicKey(): 인증서에 포함된 공개 키를 반환합니다.



예제


  • 아래 예제는 인증서를 로드하고, 기본 정보를 출력하는 모습을 보여줍니다.

import java.io.FileInputStream;
import java.io.InputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Date;

public class X509CertificateExample {
    public static void main(String[] args) {
        try {
            // 인증서 파일 경로
            String certificatePath = "path/to/your/certificate.crt";
            
            // 인증서 파일을 입력 스트림으로 읽음
            InputStream inStream = new FileInputStream(certificatePath);
            
            // CertificateFactory 인스턴스 생성
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            
            // 인증서 파싱
            X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
            
            // 기본 정보 출력
            System.out.println("Issuer: " + cert.getIssuerDN());
            System.out.println("Subject: " + cert.getSubjectDN());
            System.out.println("Valid From: " + cert.getNotBefore());
            System.out.println("Valid Until: " + cert.getNotAfter());
            System.out.println("Serial Number: " + cert.getSerialNumber());
            System.out.println("Signature Algorithm: " + cert.getSigAlgName());
            System.out.println("Public Key: " + cert.getPublicKey());
            
            // 유효성 검사
            cert.checkValidity(new Date());
            System.out.println("Certificate is valid.");
            
            inStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



SSL 인증 무시 예제


  • X509TrustManager를 사용하여 SSL 인증을 무시하는 방법을 설명합니다. 이는 보안 테스트를 목적을 위한 것이며, 실제 운영 환경에서는 사용하지 않는 것이 좋습니다.

    • 아래 코드는 X509TrustManager를 사용하여 모든 인증서를 신뢰하도록 설정합니다. 이는 로컬 테스트나 개발 단계에서 유용하지만, 보안상의 이유로 프로덕션 환경에서는 적절한 인증서 검증이 필요합니다.
import javax.net.ssl.*;
import java.security.cert.X509Certificate;

public class SSLUtils {
    
    public static void disableSSLVerification() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    }
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }
            };

            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        disableSSLVerification();
        // 이후 HTTPS 연결은 SSL 인증서 검증을 무시합니다.
    }
}




profile
For the sake of someone who studies computer science

0개의 댓글