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();
}
}
}
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 인증서 검증을 무시합니다.
}
}