Loading...
MySQL 9.5 Reference Manual 9.5의 8.3.5 Reusing SSL Sessions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL client 프로그램은 서버가 런타임 캐시에 해당 세션을 보관하고 있는 경우, 이전 SSL 세션을 재사용하도록 선택할 수 있습니다. 이 섹션에서는 SSL 세션 재사용에 유리한 조건, 세션 캐시를 관리하고 모니터링하는 데 사용되는 서버 변수, 그리고 세션 데이터를 저장하고 재사용하기 위한 클라이언트 명령줄 옵션에 대해 설명합니다.
각 full TLS 교환은 계산량과 네트워크 오버헤드 측면에서 비용이 많이 들 수 있으며, TLSv1.3이 사용될 경우 비용이 더 적습니다. 이미 설정된 세션에서 세션 티켓을 추출한 후, 다음 커넥션을 설정할 때 그 티켓을 제출하면, 해당 세션을 재사용할 수 있는 경우 전체 비용이 줄어듭니다.
예를 들어, 여러 커넥션을 열어 더 빠르게 생성할 수 있는 웹 페이지가 있다고 할 때 그 이점을 생각해 볼 수 있습니다.
일반적으로, SSL 세션을 재사용할 수 있으려면 다음 조건을 만족해야 합니다:
서버는 자신의 세션 캐시를 메모리에 유지해야 합니다.
서버 측 세션 캐시 타임아웃이 만료되지 않아야 합니다.
각 클라이언트는 활성 세션의 캐시를 유지하고, 이를 안전하게 보관해야 합니다.
C 애플리케이션은 C API 기능을 사용하여 암호화된 커넥션에서 세션 재사용을 활성화할 수 있습니다(참고: SSL Session Reuse).
초기 TLS 컨텍스트를 생성하기 위해, 서버는 시작 시점에 컨텍스트 관련 시스템 변수 값들을 사용합니다. 컨텍스트 값을 노출하기 위해, 서버는 또한 여기에 대응하는 상태 변수 집합도 초기화합니다. 다음 표는 서버의 런타임 세션 캐시를 정의하는 시스템 변수와 현재 활성 세션 캐시 값을 노출하는 대응 상태 변수를 보여 줍니다.
Table 8.13 System and Status Variables for Session Reuse
| System Variable Name | Corresponding Status Variable Name |
|---|---|
ssl_session_cache_mode | Ssl_session_cache_mode |
ssl_session_cache_timeout | Ssl_session_cache_timeout |
참고
ssl_session_cache_mode 서버 변수의 값이 기본 모드인 ON인 경우, Ssl_session_cache_mode 상태 변수의 값은 SERVER입니다.
SSL 세션 캐시 변수는 mysql_main 및 mysql_admin TLS 채널 모두에 적용됩니다. 이 값들은 또한 Performance Schema의 tls_channel_status 테이블에서 다른 활성 TLS 컨텍스트에 대한 속성과 함께 속성으로 노출됩니다.
런타임에서 SSL 세션 캐시를 재구성하려면, 다음 절차를 사용합니다:
1mysql> SET GLOBAL ssl_session_cache_timeout = 600;
시스템 변수와 상태 변수로 이루어진 각 쌍의 값은 재구성 절차가 작동하는 방식 때문에 일시적으로 서로 다른 값을 가질 수 있습니다.
1mysql> SHOW VARIABLES LIKE 'ssl_session_cache_timeout'; 2+---------------------------+-------+ 3| Variable_name | Value | 4+---------------------------+-------+ 5| ssl_session_cache_timeout | 600 | 6+---------------------------+-------+ 71 row in set (0.00 sec) 8 9mysql> SHOW STATUS LIKE 'Ssl_session_cache_timeout'; 10+---------------------------+-------+ 11| Variable_name | Value | 12+---------------------------+-------+ 13| Ssl_session_cache_timeout | 300 | 14+---------------------------+-------+ 151 row in set (0.00 sec)
변수 값을 설정하는 방법에 대한 추가 정보는 [System Variable Assignment](https://dev.mysql.com/doc/refman/9.5/en/set-variable.html#set-variable-system-variables "System Variable Assignment")를 참조하십시오.
2. ALTER INSTANCE RELOAD TLS를 실행합니다. 이 문장은 캐시 관련 시스템 변수의 현재 값으로부터 활성 TLS 컨텍스트를 재구성합니다. 또한 캐시 관련 상태 변수를 설정하여 새로운 활성 캐시 값을 반영합니다. 이 문장에는 CONNECTION_ADMIN 권한이 필요합니다.
1mysql> ALTER INSTANCE RELOAD TLS; 2Query OK, 0 rows affected (0.01 sec) 3 4mysql> SHOW VARIABLES LIKE 'ssl_session_cache_timeout'; 5+---------------------------+-------+ 6| Variable_name | Value | 7+---------------------------+-------+ 8| ssl_session_cache_timeout | 600 | 9+---------------------------+-------+ 101 row in set (0.00 sec) 11 12mysql> SHOW STATUS LIKE 'Ssl_session_cache_timeout'; 13+---------------------------+-------+ 14| Variable_name | Value | 15+---------------------------+-------+ 16| Ssl_session_cache_timeout | 600 | 17+---------------------------+-------+ 181 row in set (0.00 sec)
[`ALTER INSTANCE RELOAD TLS`](https://dev.mysql.com/doc/refman/9.5/en/alter-instance.html#alter-instance-reload-tls) 실행 이후에 설정되는 새로운 커넥션은 새로운 TLS 컨텍스트를 사용합니다. 기존 커넥션은 영향을 받지 않습니다.
모든 MySQL client 프로그램은, 원래 커넥션이 아직 활성 상태일 때 세션 데이터를 저장해 두었다는 조건 하에서, 동일한 서버에 대해 생성된 새로운 암호화된 커넥션에 대해 이전 세션을 재사용할 수 있습니다. 세션 데이터는 파일에 저장되며, 클라이언트를 다시 실행할 때 이 파일을 지정합니다.
SSL 세션 데이터를 저장하고 재사용하려면, 다음 절차를 사용합니다:
mysql을 실행하여 MySQL 9.5가 실행 중인 서버에 대한 암호화된 커넥션을 설정합니다.
ssl_session_data_print 명령을 사용하여 현재 활성 세션 데이터를 안전하게 저장할 수 있는 파일의 경로를 지정합니다. 예를 들면 다음과 같습니다:
1mysql> ssl_session_data_print ~/private-dir/session.txt
세션 데이터는 null-terminated, PEM 인코딩된 ANSI 문자열 형태로 얻습니다. 경로와 파일 이름을 생략하면, 이 문자열은 표준 출력으로 출력됩니다.
3. 명령 인터프리터의 프롬프트에서, 임의의 MySQL client 프로그램을 실행하여 동일한 서버에 대한 새로운 암호화된 커넥션을 설정합니다. 세션 데이터를 재사용하려면, --ssl-session-data 명령줄 옵션과 파일 인자를 지정합니다.
예를 들어, [**mysql**](https://dev.mysql.com/doc/refman/9.5/en/mysql.html "6.5.1 mysql — The MySQL Command-Line Client")을 사용하여 새로운 커넥션을 설정합니다:
1mysql -u admin -p --ssl-session-data=~/private-dir/session.txt
그리고 그 다음에 [**mysqlshow**](https://dev.mysql.com/doc/refman/9.5/en/mysqlshow.html "6.5.6 mysqlshow — Display Database, Table, and Column Information") 클라이언트를 실행합니다:
1mysqlshow -u admin -p --ssl-session-data=~/private-dir/session.txt 2Enter password: ***** 3+--------------------+ 4| Databases | 5+--------------------+ 6| information_schema | 7| mysql | 8| performance_schema | 9| sys | 10| world | 11+--------------------+
각 예제에서, 클라이언트는 동일한 서버에 대한 새로운 커넥션을 설정하면서 원래 세션을 재개하려고 시도합니다.
[**mysql**](https://dev.mysql.com/doc/refman/9.5/en/mysql.html "6.5.1 mysql — The MySQL Command-Line Client")이 세션을 재사용했는지 확인하려면, `status` 명령의 출력을 확인합니다. 현재 활성 [**mysql**](https://dev.mysql.com/doc/refman/9.5/en/mysql.html "6.5.1 mysql — The MySQL Command-Line Client") 커넥션이 세션을 재개했다면, status 정보에 `SSL session reused: true`가 포함됩니다.
mysql 및 mysqlshow 외에도, SSL 세션 재사용은 mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlslap, mysqltest, mysql_migrate_keyring, 그리고 mysql_secure_installation에 적용됩니다.
여러 조건으로 인해 세션 데이터를 성공적으로 가져오지 못할 수 있습니다. 예를 들어, 세션이 완전히 연결되지 않았거나, SSL 세션이 아니거나, 서버가 아직 세션 데이터를 보내지 않았거나, SSL 세션이 단순히 재사용 불가능한 경우 등이 있습니다.
세션 데이터를 제대로 저장했더라도, 서버의 세션 캐시가 타임아웃될 수 있습니다. 원인에 상관없이, --ssl-session-data를 지정했지만 세션을 재사용할 수 없는 경우 기본적으로 에러가 반환됩니다. 예를 들면 다음과 같습니다:
1mysqlshow -u admin -p --ssl-session-data=~/private-dir/session.txt 2Enter password: ***** 3ERROR: 4--ssl-session-data specified but the session was not reused.
에러 메시지를 표시하지 않고, 대신 조용히 새로운 세션을 생성하여 커넥션을 설정하려면, 명령줄에서 --ssl-session-data와 함께 --ssl-session-data-continue-on-failed-reuse를 지정합니다. 서버의 캐시 타임아웃이 만료된 경우, 세션 데이터를 동일한 파일에 다시 저장할 수 있습니다. 기본 서버 캐시 타임아웃은 연장할 수 있습니다(참고: Server-Side Runtime Configuration and Monitoring for SSL Session Reuse).
8.3.4 Connecting to MySQL Remotely from Windows with SSH
8.4 Security Components and Plugins