다음을 통해 공유


암호화를 사용한 연결

JDBC 드라이버 다운로드

이 문서의 예제에서는 애플리케이션이 Java 애플리케이션에서 TLS(전송 계층 보안) 암호화를 사용할 수 있도록 하는 연결 스트링 속성을 사용하는 방법을 설명합니다. encrypt, trustServerCertificate, trustStore, trustStorePasswordhostNameInCertificate 등의 새 연결 스트링 속성에 대한 자세한 내용은 연결 속성 설정을 참조하세요.

연결 구성

encrypt 속성이 true로 설정되고 trustServerCertificate 속성이 true로 설정되어 있는 경우 Microsoft JDBC Driver for SQL Server는 TLS 인증서의 유효성을 검사하지 않습니다. 이 설정은 SQL Server 인스턴스에 자체 서명된 인증서만 있는 경우와 같은 테스트 환경에서 연결을 허용하는 데 일반적입니다.

다음 코드 예제에서는 연결 문자열에 trustServerCertificate 속성을 설정하는 방법을 보여 줍니다.

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

encrypt 속성이 true로 설정되고 trustServerCertificate 속성이 false로 설정된 경우 Microsoft JDBC Driver for SQL Server는 SQL Server TLS 인증서의 유효성을 검사합니다. 서버 인증서의 유효성을 검사하는 것은 TLS 핸드셰이크의 일부이며 서버가 연결할 올바른 서버인지 확인합니다. 서버 인증서의 유효성을 검사하려면 명시적으로 trustStoretrustStorePassword 연결 속성을 사용하거나 암시적으로 기본 JVM(Java Virtual Machine)의 기본 트러스트 저장소를 사용하여 연결 시에 트러스트 자료를 제공해야 합니다.

trustStore 속성은 클라이언트에서 신뢰하는 인증서 목록이 포함되어 있는 인증서 trustStore 파일에 대한 경로(파일 이름 포함)를 지정합니다. trustStorePassword 속성은 데이터의 무결성을 검사하는 데 사용되는 암호를 지정합니다. JVM의 기본 신뢰 저장소 사용에 대한 자세한 내용은 암호화를 위해 클라이언트 구성을 참조하세요.

다음 코드 예제에서는 연결 스트링에서 trustStoretrustStorePassword 속성을 설정하는 방법을 보여 줍니다.

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword";

JDBC 드라이버는 hostNameInCertificate라는 또 다른 속성을 제공하는데 이 속성은 서버의 호스트 이름을 지정합니다. 이 속성의 값은 인증서의 주체 속성과 일치해야 합니다.

다음 코드 예제에서는 연결 스트링에 hostNameInCertificate 속성을 이용하는 방법을 보여 줍니다.

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword;" +
     "hostNameInCertificate=hostName";

참고 항목

또는 SQLServerDataSource 클래스에서 제공하는 적절한 setter 메서드를 사용하여 연결 속성의 값을 설정할 수 있습니다.

encrypt 속성이 true이고 trustServerCertificate 속성이 false이며 연결 스트링의 서버 이름이 TLS 인증서의 서버 이름과 일치하지 않는 경우 The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization."라는 오류가 발생합니다. 버전 7.2 이상에서는 드라이버가 TLS 인증서에서 서버 이름의 가장 왼쪽 레이블에서 야생카드 패턴 일치를 지원합니다.