X509Certificate는 Java 보안 API에서 제공하는 클래스 중 하나로, X.509 표준을 따르는 디지털 인증서를 나타냅니다. X.509는 공통적인 디지털 인증서 표준으로 주로 공개 키 기반(PKI) 인프라에서 사용됩니다. 이 클래스는 인증서의 소유자 정보, 발급자 정보, 공개 키, 유효 기간 등의 다양한 속성을 포함하고 있습니다.
패키지: java.security.cert
용도: X.509 표준 인증서를 나타내며, 주로 SSL/TLS 연결, 인증서 기반 인증 및 전자 서명 검증에 사용됩니다.
상속 계층:
java.lang.Objectjava.security.cert.Certificatejava.security.cert.X509CertificategetIssuerDN(): 인증서 발급자의 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();
}
}
}
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 인증서 검증을 무시합니다.
}
}