

# 새 SSL/TLS 인증서를 사용해 Microsoft SQL Server DB 인스턴스에 연결할 애플리케이션을 업데이트
<a name="ssl-certificate-rotation-sqlserver"></a>

2023년 1월 13일부터 Amazon RDS는 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용해 RDS DB 인스턴스에 연결하기 위한 용도의 새 인증 기관(CA) 인증서를 게시하였습니다. 아래에서 새 인증서를 사용하기 위해 애플리케이션을 업데이트하는 방법에 관한 정보를 찾으실 수 있습니다.

이 주제는 클라이언트 애플리케이션에서 SSL/TLS를 사용해 DB 인스턴스에 연결하는지 여부를 판단하는 데 도움이 됩니다. SSL/TLS를 사용해 연결한다면 이 애플리케이션에서 연결 시 인증서 확인이 필요한지 여부를 추가로 확인할 수 있습니다.

**참고**  
어떤 애플리케이션은 서버에서 인증서를 성공적으로 확인할 수 있는 경우에만 SQL Server DB 인스턴스에 연결하도록 구성되어 있습니다.  
이러한 애플리케이션의 경우 클라이언트 애플리케이션 트러스트 스토어를 업데이트하여 새 CA 인증서를 포함해야 합니다.

클라이언트 애플리케이션 트러스트 스토어에서 CA 인증서를 업데이트한 후에는 DB 인스턴스에서 인증서를 교환할 수 있습니다. 이 절차를 프로덕션 환경에서 구현하기 전에 개발 또는 스테이징 환경에서 테스트해볼 것을 적극 권장합니다.

인증서 교환에 대한 자세한 내용은 [SSL/TLS 인증서 교체](UsingWithRDS.SSL-certificate-rotation.md) 단원을 참조하십시오. 인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하십시오. Microsoft SQL Server DB 인스턴스에서 SSL/TLS를 사용하는 방법에 관한 자세한 내용은 [Microsoft SQL Server DB 인스턴스와 함께 SSL 사용](SQLServer.Concepts.General.SSL.Using.md) 단원을 참조하십시오.

**Topics**
+ [애플리케이션에서 SSL을 사용해 Microsoft SQL Server DB 인스턴스에 연결하는지 여부 확인](#ssl-certificate-rotation-sqlserver.determining-server)
+ [클라이언트에서 연결을 위해 인증서 확인이 필요한지 여부 확인](#ssl-certificate-rotation-sqlserver.determining-client)
+ [애플리케이션 트러스트 스토어 업데이트](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## 애플리케이션에서 SSL을 사용해 Microsoft SQL Server DB 인스턴스에 연결하는지 여부 확인
<a name="ssl-certificate-rotation-sqlserver.determining-server"></a>

`rds.force_ssl` 파라미터의 값에 대한 DB 인스턴스 구성을 확인하십시오. 기본적으로 `rds.force_ssl` 파라미터는 0(해제)으로 설정됩니다. `rds.force_ssl` 파라미터가 1(켜짐)로 설정된 경우 클라이언트는 연결 시 SSL/TLS를 사용해야 합니다. 파라미터 그룹에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하세요.

다음 쿼리를 실행하여 DB 인스턴스에 대한 모든 열린 연결에 대한 현재 암호화 옵션을 가져옵니다. 연결이 암호화되면 `ENCRYPT_OPTION` 열이 `TRUE`를 반환합니다.

```
select SESSION_ID,
    ENCRYPT_OPTION,
    NET_TRANSPORT,
    AUTH_SCHEME
    from SYS.DM_EXEC_CONNECTIONS
```

이 쿼리는 현재 연결만 보여줍니다. 과거에 연결/연결 해제된 애플리케이션이 SSL을 사용했는지 여부는 표시되지 않습니다.

## 클라이언트에서 연결을 위해 인증서 확인이 필요한지 여부 확인
<a name="ssl-certificate-rotation-sqlserver.determining-client"></a>

다양한 유형의 클라이언트에서 연결 시 인증서 확인이 필요한지 여부를 확인할 수 있습니다.

**참고**  
나열된 것 이외의 커넥터를 사용하는 경우 암호화된 연결을 적용하는 방법에 대한 정보는 특정 커넥터 설명서를 참조하십시오. 자세한 정보는 Microsoft SQL Server 설명서의 [Microsoft SQL 데이터베이스용 연결 모듈](https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries?view=sql-server-ver15)을 참조하십시오.

### SQL Server Management Studio
<a name="ssl-certificate-rotation-sqlserver.determining-client.management-studio"></a>

SQL Server Management Studio 연결에 암호화가 적용되는지 확인하십시오.

1. SQL Server Management Studio를 시작합니다.

1. **서버에 연결**에 서버 정보, 로그인 사용자 이름 및 암호를 입력합니다.

1. **옵션(Options)**을 선택합니다.

1. 연결 페이지에서 **연결 암호화**가 선택되어 있는지 확인하십시오.

SQL Server Management Studio에 대한 자세한 내용은 [SQL Server Management Studio 사용](http://msdn.microsoft.com/en-us/library/ms174173.aspx)을 참조하십시오.

### sqlcmd
<a name="ssl-certificate-rotation-sqlserver.determining-client.sqlcmd"></a>

`sqlcmd` 클라이언트를 사용하는 다음 예제에서는 스크립트의 SQL Server 연결을 확인하여 성공적인 연결을 위해 유효한 인증서가 필요한지 여부를 판단하는 방법을 보여줍니다. 자세한 내용은 Microsoft SQL Server 설명서의 [sqlcmd로 연결](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd?view=sql-server-ver15)을 참조하십시오.

`sqlcmd`를 사용하는 경우 다음 예제와 같이 `-N` 명령 인수를 사용하여 연결을 암호화한다면 SSL 연결 시 서버 인증서에 대한 확인이 필요합니다.

```
$ sqlcmd -N -S dbinstance.rds.amazon.com -d ExampleDB                     
```

**참고**  
`sqlcmd` 옵션을 사용하여 `-C`를 호출하면 클라이언트 측 트러스트 스토어와 일치하지 않더라도 서버 인증서를 신뢰합니다.

### ADO.NET
<a name="ssl-certificate-rotation-sqlserver.determining-client.adonet"></a>

다음 예에서 애플리케이션은 SSL을 사용하여 연결하고, 서버 인증서를 확인해야 합니다.

```
using SQLC = Microsoft.Data.SqlClient;
 
...
 
    static public void Main()  
    {  
        using (var connection = new SQLC.SqlConnection(
            "Server=tcp:dbinstance.rds.amazon.com;" +
            "Database=ExampleDB;User ID=LOGIN_NAME;" +
            "Password=YOUR_PASSWORD;" + 
            "Encrypt=True;TrustServerCertificate=False;"
            ))
        {  
            connection.Open();  
            ...
        }
```

### Java
<a name="ssl-certificate-rotation-sqlserver.determining-client.java"></a>

다음 예에서 애플리케이션은 SSL을 사용하여 연결하고, 서버 인증서를 확인해야 합니다.

```
String connectionUrl =   
    "jdbc:sqlserver://dbinstance.rds.amazon.com;" +  
    "databaseName=ExampleDB;integratedSecurity=true;" +  
    "encrypt=true;trustServerCertificate=false";
```

JDBC를 사용하여 연결하는 클라이언트에 대해 SSL 암호화를 활성화하려면 Java CA 인증서 저장소에 Amazon RDS 인증서를 추가해야 할 수도 있습니다. 지침은 Microsoft SQL Server 설명서의 [암호화를 위한 클라이언트 구성](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)을 참조하십시오. 연결 문자열에 `trustStore=path-to-certificate-trust-store-file`을 추가하여 신뢰할 수 있는 CA 인증서 파일 이름을 직접 제공할 수도 있습니다.

**참고**  
연결 문자열에 `TrustServerCertificate=true`(또는 이와 동등한)를 사용하면 연결 프로세스가 트러스트 체인 검증을 건너뜁니다. 이 경우 인증서를 검증할 수 없는 경우에도 애플리케이션이 연결됩니다. `TrustServerCertificate=false` 사용은 인증서 검증을 강제하며, 이것이 모범 사례입니다.

## 애플리케이션 트러스트 스토어 업데이트
<a name="ssl-certificate-rotation-sqlserver.updating-trust-store"></a>

Microsoft SQL Server를 사용하는 애플리케이션의 트러스트 스토어를 업데이트할 수 있습니다. 지침은 [특정 연결 암호화](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Client) 단원을 참조하십시오. 또한 Microsoft SQL Server 설명서의 [암호화를 위한 클라이언트 구성](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)을 참조하십시오.

Microsoft Windows 이외의 운영 체제를 사용하는 경우 새 루트 CA 인증서 추가에 대한 정보는 SSL/TLS 구현을 위한 소프트웨어 배포 설명서를 참조하십시오. 예를 들어 OpenSSL 및 GnuTLS가 널리 사용되는 옵션입니다. 이 구현 방법을 사용하여 RDS 루트 CA 인증서에 신뢰를 추가하십시오. Microsoft는 일부 시스템에 대한 인증서 구성 지침을 제공합니다.

루트 인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하십시오.

인증서를 가져오는 샘플 스크립트는 [트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script) 섹션을 참조하세요.

**참고**  
트러스트 스토어를 업데이트할 때 새 인증서를 추가할 뿐 아니라 이전 인증서를 유지할 수도 있습니다.