다음을 통해 공유


SSL 지원 이해

SQL Server에 연결할 때 응용 프로그램에서 암호화를 요청하고 SQL Server 인스턴스가 SSL 암호화를 지원하도록 구성되어 있는 경우 Microsoft SQL Server JDBC 드라이버는 SSL 핸드셰이크를 시작합니다. 핸드셰이크를 통해 서버와 클라이언트에서는 데이터 보호에 사용될 암호화 및 암호화 알고리즘을 협상할 수 있습니다. SSL 핸드셰이크가 완료되면 클라이언트와 서버는 암호화된 데이터를 안전하게 전송할 수 있게 됩니다. SSL 핸드셰이크 중 서버는 공개 키 인증서를 클라이언트로 보냅니다. 공개 키 인증서의 발급자를 CA(인증 기관)라고 합니다. 클라이언트는 인증 기관이 신뢰할 수 있는 기관인지 확인해야 합니다.

응용 프로그램에서 암호화를 요청하지 않는 경우 Microsoft SQL Server JDBC 드라이버는 SQL Server에서 SSL 암호화를 지원하도록 요구하지 않습니다. SQL Server 인스턴스가 SSL 암호화를 사용하도록 구성되어 있지 않으면 암호화 없이 연결이 이루어집니다. SSL 암호화를 사용하도록 SQL Server 인스턴스가 구성되어 있으면 올바르게 구성된 JVM(Java Virtual Machine)에서 실행되는 경우 드라이버에서 자동으로 SSL 암호화를 사용합니다. 그렇지 않은 경우 연결이 종료되고 드라이버에서 오류가 발생합니다.

참고

SQL Server에 대해 SSL을 구성하는 방법은 SQL Server 온라인 설명서에서 SQL Server 연결 암호화 항목을 참조하십시오.

응용 프로그램에서 SSL 암호화를 사용할 수 있도록 Microsoft SQL Server JDBC 드라이버 버전 1.2 릴리스 이상에서는 다음과 같은 연결 속성이 제공됩니다. encrypt, trustServerCertificate, trustStore, trustStorePasswordhostNameInCertificate. 자세한 내용은 연결 속성 설정을 참조하십시오.

다음 표에는 가능한 SSL 연결 시나리오에 대해 Microsoft SQL Server JDBC 드라이버 버전이 어떻게 동작하는지 요약되어 있습니다. 각 시나리오는 서로 다른 SSL 연결 속성 집합을 사용합니다. 표에는 다음과 같은 값이 포함되어 있습니다.

  • blank: "연결 문자열에 속성이 없습니다."

  • value: "연결 문자열에 속성이 있으며 해당 값이 유효합니다."

  • any: "연결 문자열에 속성이 있는지와 해당 값이 유효한지 여부는 상관없습니다."

참고

SQL Server 사용자 인증 및 Windows 통합 인증에 대해서도 같은 동작이 적용됩니다.

암호화 trustServerCertificate hostNameInCertificate trustStore trustStorePassword 동작

false 또는 blank

any

any

any

any

Microsoft SQL Server JDBC 드라이버는 SQL Server에서 SSL 암호화를 지원하도록 요구하지 않습니다. 서버에 자체 서명된 인증서가 있는 경우 드라이버에서 SSL 인증서 교환을 시작합니다. SSL 인증서의 유효성은 검사되지 않으며 자격 증명(로그인 패킷에 있음)만 암호화됩니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구할 경우 드라이버에서 SSL 인증서 교환을 시작합니다. SSL 인증서의 유효성은 검사되지 않지만 전체 통신은 암호화됩니다.

true

true

any

any

any

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다. trustServerCertificate 속성이 "true"로 설정되어 있는 경우 드라이버에서 SSL 인증서의 유효성을 검사하지 않습니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

blank

blank

blank

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 연결 URL에 지정된 serverName 속성을 사용하여 서버 SSL 인증서의 유효성을 검사하며 트러스트 관리자 팩토리의 조회 규칙에 따라 사용할 인증서 저장소를 결정합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

value

blank

blank

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 hostNameInCertificate 속성에 대해 지정된 값을 사용하여 SSL 인증서 주체 값의 유효성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

blank

value

value

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStore 속성 값을 사용하여 인증서 trustStore 파일을 찾고 trustStorePassword 속성 값을 사용하여 trustStore 파일의 무결성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

blank

blank

value

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStorePassword 속성 값을 사용하여 기본 trustStore 파일의 무결성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

blank

value

blank

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStore 속성 값을 사용하여 trustStore 파일의 위치를 조회합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

value

blank

value

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStorePassword 속성 값을 사용하여 기본 trustStore 파일의 무결성을 검사합니다. 또한 hostNameInCertificate 속성 값을 사용하여 SSL 인증서의 유효성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

value

value

blank

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStore 속성 값을 사용하여 trustStore 파일의 위치를 조회합니다. 또한 hostNameInCertificate 속성 값을 사용하여 SSL 인증서의 유효성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

true

false 또는 blank

value

value

value

Microsoft SQL Server JDBC 드라이버가 SQL Server에서 SSL 암호화를 사용하도록 요청합니다.

클라이언트에서 SSL 암호화를 지원하도록 서버가 요구하거나 서버에서 암호화를 지원하는 경우 드라이버에서 SSL 인증서 교환을 시작합니다.

드라이버는 trustStore 속성 값을 사용하여 인증서 trustStore 파일을 찾고 trustStorePassword 속성 값을 사용하여 trustStore 파일의 무결성을 검사합니다. 또한 hostNameInCertificate 속성 값을 사용하여 SSL 인증서의 유효성을 검사합니다.

서버가 암호화를 지원하도록 구성되어 있지 않은 경우 드라이버에서 오류가 발생하고 연결이 종료됩니다.

encrypt 속성이 true로 설정되어 있는 경우 Microsoft SQL Server JDBC 드라이버에서는 JVM의 기본 JSSE 보안 공급자를 통해 SQL Server와 SSL 암호화를 협상합니다. 기본 보안 공급자는 SSL 암호화를 성공적으로 협상하는 데 필요한 기능을 모두 지원하지 않을 수 있습니다. 예를 들어 기본 보안 공급자는 SQL Server SSL 인증서에 사용되는 RSA 공개 키의 크기를 지원하지 않을 수 있습니다. 이 경우 기본 보안 공급자에서 오류가 발생하여 JDBC 드라이버가 연결을 종료합니다. 이 문제를 해결하려면 다음 중 하나를 수행하십시오.

  • 보다 작은 RSA 공개 키를 사용하는 서버 인증서를 사용하여 SQL Server를 구성합니다.

  • "<java-home>/lib/security/java.security" 보안 속성 파일에서 다른 JSSE 보안 공급자를 사용하도록 JVM을 구성합니다.

  • 다른 JVM을 사용합니다.

서버 SSL 인증서의 유효성 검사

SSL 핸드셰이크 중 서버는 공개 키 인증서를 클라이언트로 보냅니다. JDBC 드라이버 또는 클라이언트는 클라이언트에서 신뢰하는 인증 기관에서 서버 인증서를 발행했는지 검사해야 합니다. 서버 인증서는 다음 조건을 충족해야 합니다.

  • 인증서가 신뢰할 수 있는 인증 기관에 의해 발행되었습니다.

  • 인증서는 서버 인증용으로 발행되어야 합니다.

  • 인증서가 만료되지 않았습니다.

  • 인증서의 주체 값은 CN(일반 이름)이 연결 문자열 또는 hostNameInCertificate 속성 값(지정된 경우)에 지정된 서버 이름으로 시작된다는 것을 나타냅니다. 서버 이름이 IP 주소일 경우 드라이버는 CN 값이 IP 주소로 시작하는지 검사합니다.

참고

개념

SSL 암호화 사용

관련 자료

JDBC 드라이버 응용 프로그램 보안