SSL/TLS 처리 방식 – JDK 1.7

JDK 1.7은 자체적으로 Java Cryptography Architecture (JCA) 및 **Java Secure Socket Extension (JSSE)**를 사용하여 암호화 및 SSL/TLS 통신을 처리합니다. 따라서 JDK 1.7은 OpenSSL에 의존하지 않습니다. Java 애플리케이션에서 SSL/TLS 통신을 수행할 때 OpenSSL 라이브러리가 필요하지 않으며, JDK는 자체 구현을 사용하여 암호화 작업을 처리합니다.

Java의 SSL/TLS 처리 방식:

  1. JCA (Java Cryptography Architecture):
    JDK는 암호화 알고리즘과 SSL/TLS 통신을 처리하기 위한 내장 라이브러리(프로바이더)를 제공합니다. JCA는 다양한 암호화 알고리즘을 지원하며, 이를 통해 키 관리, 디지털 서명, 메시지 다이제스트, 대칭 및 비대칭 암호화를 처리합니다.
  2. JSSE (Java Secure Socket Extension):
    JSSE는 Java의 SSL/TLS 통신을 처리하는 모듈입니다. 이 모듈은 JDK 자체적으로 SSL/TLS 프로토콜을 처리하며, Java 애플리케이션이 보안 소켓을 설정하고, TLS 기반 통신을 수행할 수 있도록 합니다.
  3. JDK 1.7의 TLS 지원:
    JDK 1.7은 기본적으로 TLS 1.0TLS 1.1을 지원합니다. TLS 1.2 지원은 JDK 7의 업데이트 버전에서 도입되었습니다. JDK 7 업데이트 131부터는 TLS 1.2가 기본적으로 활성화되며, 이전 버전에서는 명시적으로 TLS 1.2를 활성화해야 할 수 있습니다.

OpenSSL과의 차이:

  • JavaOpenSSL이 아닌 JCA/JSSE를 사용하여 암호화 및 SSL/TLS 처리를 수행합니다.
  • OpenSSL은 네이티브 C 라이브러리로서 운영 체제 수준에서 암호화 및 SSL/TLS를 처리하며, Java는 자체 내장된 API를 통해 암호화 기능을 제공합니다.
  • 즉, JDK 1.7은 OpenSSL에 의존하지 않고 자체적으로 SSL/TLS 프로토콜을 처리합니다.

OpenSSL이 필요한 경우:

Java 자체는 OpenSSL에 의존하지 않지만, 다음과 같은 경우에는 OpenSSL이 필요할 수 있습니다:

  1. Java 애플리케이션이 네이티브 라이브러리와 상호 작용하는 경우:
    예를 들어, Java 애플리케이션에서 네이티브 C 라이브러리를 사용하여 SSL/TLS 처리를 하거나 성능 최적화를 위해 OpenSSL을 사용하는 경우가 있을 수 있습니다. 이 경우 JNI(Java Native Interface)를 통해 OpenSSL 라이브러리를 사용할 수 있습니다.
  2. 특정 TLS 성능 향상:
    성능 최적화를 위해 일부 Java 애플리케이션은 OpenSSL을 통해 암호화 작업을 처리하려 할 수 있습니다. 예를 들어, Conscrypt와 같은 타사 라이브러리를 사용하여 OpenSSL 기반 암호화를 Java 애플리케이션에 도입할 수 있습니다.
  3. 서버 설정:
    Java 애플리케이션이 실행되는 서버에서 시스템 전체적으로 OpenSSL이 SSL/TLS 통신을 처리할 수 있지만, 이는 Java가 아닌 서버 자체의 설정에 의한 것입니다.

결론:

JDK 1.7 자체는 SSL/TLS 통신에 OpenSSL에 의존하지 않습니다. Java는 JCA/JSSE를 사용하여 SSL/TLS 통신을 자체적으로 처리합니다. OpenSSL은 네이티브 라이브러리로, Java와는 별개로 운영 체제에서 SSL/TLS 통신을 처리하는 도구입니다.