tencent cloud

TencentDB for MySQL

소식 및 공지 사항
제품 동향
신규 사용자 가이드
제품 소개
제품 개요
제품 장점
응용 시나리오
데이터베이스 아키텍처
격리 정책
제품 기능 목록
데이터베이스 인스턴스
고가용성(멀티 가용존)
리전 및 가용존
자체개발 커널
TXSQL 커널 개요
기능적 특성
성능적 특성
보안적 특성
안정적 특성
구매 가이드
과금 개요
구매 방법
연장 안내
연체 안내
환불 안내
인스턴스 비용 조정 설명
백업 공간 과금 안내
시작하기
시작 개요
MySQL 인스턴스 생성
운영 가이드
사용 제한
운영 개요
인스턴스의 점검 관리
인스턴스 프로모션
인스턴스 확장
데이터베이스 프록시
데이터베이스 관리(DMC)
계정 관리
매개변수 설정
백업과 롤백
데이터 마이그레이션
네트워크 및 보안
모니터링 및 알람
로그 센터
태그
사례 튜토리얼
TencentDB for MySQL의 사용 규범
애플리케이션 구성 자동 재연결
MySQL 마스터 인스턴스 매개변수 수정의 영향
MyISAM에서 InnoDB로의 자동 변환 제한
TencentDB for MySQL을 위한 VPC 생성
TencentDB for MySQL를 통해 비즈니스 부하 능력 향상
2리전 3데이터센터 재해 복구 아키텍처 구축
읽기/쓰기 분리로 TencentDB for MySQL 성능 향상
DTS를 사용하여 InnoDB에서 RocksDB로 데이터 마이그레이션
웹 애플리케이션을 위한 LAMP 스택 구축
Drupal 웹사이트 구축
Python을 통해 MySQL API 사용
백서
성능 백서
보안 백서
장애 처리
연결 관련
성능 관련
인스턴스 데이터 동기화 딜레이
케이스 인센시티브 설정 실패
API문서
History
Introduction
API Category
Instance APIs
Making API Requests
Data Import APIs
Database Proxy APIs
Database Audit APIs
Security APIs
Task APIs
Backup APIs
Account APIs
Rollback APIs
Parameter APIs
Database APIs
Monitoring APIs
Log-related API
Data Types
Error Codes
FAQs
과금 관련
백업 관련
롤백 관련
로그인
매개변수 수정
업그레이드 관련
계정 권한
성능 메모리
유지보수 관련 FAQ
데이터 마이그레이션
기능 특징
콘솔 관련
로그 관련
API 2.0에서 3.0으로 전환 가이드
Service Agreement
Service Level Agreement
Terms of Service
범용 참고
표준 및 인증
고객센터
용어집

SSL 암호화 설정

PDF
포커스 모드
폰트 크기
마지막 업데이트 시간: 2024-07-25 16:45:27

SSL 암호화 개요

SSL(Secure Sockets Layer) 인증은 클라이언트에서 클라우드 데이터베이스 서버로의 인증으로 사용자와 서버를 인증합니다. SSL 암호화를 활성화하여 CA 인증서를 얻고 CA 인증서를 서버에 업로드합니다. 클라이언트가 데이터베이스에 액세스하면 SSL 프로토콜이 활성화되고 클라이언트와 데이터베이스 서버 사이에 SSL 보안 터널이 설정되어 암호화된 데이터 정보 전송을 실현하며, 전송 중 데이터 가로채기, 변조 및 도청을 방지하고 양측이 전송하는 정보의 보안성을 보증합니다.
SSL 프로토콜은 신뢰할 수 있는 전송 제어 프로토콜(TCP)에 기반을 두고 구축되어야 하며, 응용 레이어 프로토콜과 독립적이며, 높은 레이어의 응용 레이어 프로토콜(예시: HTTP, FTP, TELNET 등)은 SSL 프로토콜 위에 투명하게 구축될 수 있다는 장점이 있습니다. SSL 프로토콜은 응용 레이어 프로토콜의 통신 전에 암호화 알고리즘, 통신 키 협상 및 서버 인증을 완료한 후 응용 레이어 프로토콜이 전송하는 데이터를 암호화하여 통신의 비밀성을 보장합니다.

배경

비암호화 방식으로 데이터베이스에 연결할 경우, 네트워크에서 전송되는 모든 정보는 플레인 텍스트이기 때문에 불법 사용자로부터 도청, 변조, 사칭의 3가지 리스크가 있으며 SSL 프로토콜은 이러한 3가지 리스크를 해결하도록 설계되어 이론상 다음을 달성할 수 있습니다:
정보는 암호화되어 전송되며 제 3자가 도청할 수 없습니다.
인증 메커니즘을 사용하여 변조되면 통신의 양측은 즉시 알 수 있습니다.
본인 인증을 통해 명의 도용을 방지합니다.
TencentDB for MySQL은 SSL 암호화를 활성화하고 SSL CA 인증서를 필요한 애플리케이션 서비스에 다운로드 및 설치하여 연결 보안성을 향상할 수 있도록 지원합니다.
주의:
SSL 암호화는 데이터 자체를 보호하지 않습니다. 대신 데이터베이스와 서버 간의 트래픽 보안을 보장합니다. 전송 레이어에서 네트워크 연결을 암호화하면 통신 데이터의 보안성과 완정성을 향상시킬 수 있지만 네트워크 연결의 응답 시간이 늘어납니다.

전제 조건

인스턴스 버전은 MySQL 5.6/5.7/8.0입니다.
인스턴스 아키텍처는 2노드/3노드입니다.
인스턴스 엔진은 InooDB/RocksDB입니다.

SSL 암호화 활성화

1. TencentDB for MySQL 콘솔 로그인 후, 인스턴스 리스트에서 인스턴스 ID 또는 작업 열의 관리를 클릭하여 인스턴스 관리 페이지로 이동합니다.
2. 인스턴스 관리 페이지의 데이터 보안 페이지에서 SSL 페이지를 선택합니다.


3. 이 기능은 기본적으로 비활성화되어 있으며 스위치를 활성화하여 확인을 클릭하고 SSL 암호화를 활성화합니다.
원본 인스턴스는 다음과 같이 SSL 창을 활성화합니다.

주의:
SSL 활성화 과정 중 데이터베이스 인스턴스가 재시작되어 SSL 인증서를 로딩합니다. 비즈니스에 재연결 메커니즘이 있는지 확인하십시오.
RO 인스턴스는 다음과 같이 SSL 인터페이스를 활성화합니다.


주의:
RO 인스턴스를 구성하는 SSL 기능은 동일한 RO 그룹의 다른 RO 인스턴스의 구성을 동기화합니다.
4. 다운로드를 클릭하여 SSL CA 인증서를 다운로드합니다. 다운로드한 파일은 압축 패키지(TencentDB-CA-Chain.zip)이며 다음 세개의 파일이 포함되어 있습니다:
p7b 파일: Windows 시스템에서 CA 인증서를 가져오기 위해 사용됩니다.
jks 파일: Java의 truststore 인증서 저장 파일, 비밀번호는 tencentdb로 통합되어 Java 프로그램에서 CA 인증서 링크를 가져오는 데 사용됩니다.
pem 파일: 다른 시스템이나 애플리케이션에서 CA 인증서를 가져오기 위해 사용됩니다.

SSL CA 인증서 구성

SSL 암호화를 활성화한 후 클라이언트를 사용하여 클라우드 데이터베이스에 연결할 때 SSL CA 인증서를 구성해야 합니다. 다음은 Navicat을 예로 들어 SSL CA 인증서를 설치하는 방법을 소개합니다. 다른 애플리케이션이나 클라이언트의 경우 해당 제품의 사용 설명서를 참고하십시오.
설명:
TencentDB for MySQL에 대해 SSL 암호화가 활성화 또는 비활성화될 때마다 새 인증서가 생성됩니다.
1. Navicat을 엽니다.
2. 해당 데이터베이스를 우클릭하고 연결 편집을 선택합니다.
3. SSL 탭을 선택하고 .pem 형식의 CA 인증서 경로를 선택합니다. 아래 이미지의 설정을 완료한 후 확인을 클릭합니다.
설명:
connection is being used 오류가 발생하면 이전 세션이 연결 해제되지 않았기 때문일 수 있습니다. Navicat을 비활성화하고 다시 시도하십시오.
4. 해당 데이터베이스를 더블 클릭하여 연결이 정상인지 테스트합니다.

SSL 암호화 비활성화

1. TencentDB for MySQL 콘솔 로그인 후, 인스턴스 리스트에서 인스턴스 ID 또는 작업 열의 관리를 클릭하여 인스턴스 관리 페이지로 이동합니다.
2. 인스턴스 관리 페이지의 데이터 보안 페이지에서 SSL 페이지를 선택합니다.
3. 활성화 됨 앞의 스위치 버튼을 클릭하고 팝업 창에서 확인을 클릭합니다.

설명:
SSL 비활성화 중 데이터베이스 인스턴스가 재시작되어 SSL 인증서를 언마운트합니다. 비즈니스에 재연결 메커니즘이 있는지 확인하십시오.

SSL 연결 암호화가 활성화된 인스턴스에 연결

SSL 연결 암호화를 사용하여 다음과 같이 데이터베이스 SQL에 연결합니다:
mysql -P <포트 번호> -h <IP 주소> -u <사용자 이름> -p<비밀번호> --ssl-ca<ca 인증서>

일반 프로그램에서 SSL가 활성화된 인스턴스 연결을 위한 예시 코드

PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "<다운로드된 인증서 경로>", NULL, NULL);
mysqli_real_connect($conn, '<데이터베이스 액세스 주소>', '<데이터베이스 액세스 사용자 이름>', '<데이터베이스 액세스 비밀번호>', '<액세스할 지정된 데이터베이스>', <액세스 포트>, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (Using PDO)
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '<다운로드된 인증서의 경로>'
);
$db = new PDO('mysql:host=<데이터베이스 액세스 주소>;port=<액세스 포트>;dbname=<액세스할 지정된 데이터베이스>', '<데이터베이스 액세스 사용자 이름>', '<데이터베이스 액세스 비밀번호>', $options);
Java (MySQL Connector for Java)
# generate truststore and keystore in code

String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\\\s+"));

# use the generated keystore and truststore

System.setProperty("javax.net.ssl.keyStore","<다운로드한 인증서의 경로>");
System.setProperty("javax.net.ssl.keyStorePassword","tencentdb");
System.setProperty("javax.net.ssl.trustStore","<다운로드된 인증서의 경로>");
System.setProperty("javax.net.ssl.trustStorePassword","tencentdb");

url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", '<데이터베이스 액세스 주소>', '<액세스할 지정된 데이터베이스>');
properties.setProperty("user", '<데이터베이스 액세스 사용자 이름>');
properties.setProperty("password", '<데이터베이스 액세스 비밀번호>');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "<데이터베이스 액세스 주소>",
UserID = "<데이터베이스 액세스 사용자 이름>",
Password = "<데이터베이스 액세스 비밀번호>",
Database = "<액세스할 지정된 데이터베이스>",
SslMode = MySqlSslMode.VerifyCA,
SslCa = "<다운로드된 인증서>",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='<데이터베이스 액세스 사용자 이름>',
password='<데이터베이스 액세스 비밀번호>',
database='<액세스할 지정된 데이터베이스>',
host='<데이터베이스 액세스 주소>',
ssl_ca='<다운로드한 인증서 경로>')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='<데이터베이스 액세스 사용자 이름>',
password='<데이터베이스 액세스 비밀번호>',
database='<액세스할 지정된 데이터베이스>',
host='<데이터베이스 액세스 주소>',
ssl={'ca': '<다운로드한 인증서 경로>'})
Django (PyMySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<액세스할 지정된 데이터베이스>',
'USER': '<데이터베이스 액세스 사용자 이름>',
'PASSWORD': '<데이터베이스 액세스 비밀번호>',
'HOST': '<데이터베이스 액세스 주소>',
'PORT': '<액세스 포트>',
'OPTIONS': {
'ssl': {'ca': '<다운로드한 인증서의 경로>'}
}
}
}
Node.js
var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("<다운로드된 인증서의 경로>", "utf8")];
var conn=mysql.createConnection({
host:"<데이터베이스 액세스 주소>",
user:"<데이터베이스 액세스 사용자 이름>",
password:"<데이터베이스 액세스 비밀번호>",
database:"<액세스할 지정된 데이터베이스>",
port:<액세스 포트>,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("<다운로드된 인증서의 경로>")
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:<액세스 포트>)/%s?allowNativePasswords=true&tls=custom","<데이터베이스 액세스 사용자 이름>" , "<데이터베이스 액세스 비밀번호>", "<데이터베이스 액세스 주소>", '<액세스할 지정된 데이터베이스>')
db, _ := sql.Open("mysql", connectionString)
Ruby
client = Mysql2::Client.new(
:host => '<데이터베이스 액세스 주소>',
:username => '<데이터베이스 액세스 사용자 이름>',
:password => '<데이터베이스 액세스 비밀번호>',
:database => '<액세스할 지정된 데이터베이스>',
:sslca => '<다운로드된 인증서의 경로>'
)


도움말 및 지원

문제 해결에 도움이 되었나요?

피드백