日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SSL連接RDS MySQL數據庫

本文介紹配置了SSL鏈路加密后,如何通過MySQL命令行終端以及JDBC連接數據庫。

前提條件

操作步驟

使用云端證書連接MySQL

開啟SSL加密后,客戶端和RDS MySQL之間的連接是否加密與客戶端的類型和設置有關。例如,客戶端可能默認采用加密連接。您可以修改客戶端的設置或代碼,要求建立加密連接以及驗證RDS MySQL的身份。

命令行

對于MySQL 5.7.11及以后版本的客戶端,在連接命令中添加--ssl-mode選項可以設置SSL加密。

說明

對于MariaDB客戶端以及MySQL 5.7.11之前的客戶端,請使用--ssl和--ssl-verify-server-cert等選項。具體請參見MariaDB和MySQL官方文檔。

  • --ssl-mode=DISABLED表示連接不加密。

  • --ssl-mode=PREFERRED或者不添加--ssl-mode選項,表示嘗試加密連接,如果無法加密則采用非加密連接。

  • --ssl-mode=REQUIRED,表示必須加密連接,如果無法加密則連接失敗。

  • --ssl-mode=VERIFY_CA,表示必須加密連接,并用本地的CA證書驗證服務器證書是否有效。

  • --ssl-mode=VERIFY_IDENTITY,表示必須加密連接,并用本地的CA證書驗證服務器證書是否有效,并驗證服務器證書的主機名或IP地址是否與實際連接的主機名或IP地址匹配。

示例一:嘗試加密連接,如果無法加密則采用非加密連接。

mysql -h {RDS連接地址} -u {RDS賬號} -p --ssl-mode=PREFERRED

示例二:要求加密連接,并驗證服務器證書的有效性。

mysql -h {RDS連接地址} -u {RDS賬號} -p --ssl-mode=VERIFY_CA --ssl-ca={CA證書路徑}/ApsaraDB-CA-Chain.pem
說明
  • 上述示例里的{RDS連接地址}、{RDS賬號}和{CA證書路徑}需替換為實際的值。

  • 更多關于--ssl-mode選項的說明,請參見MySQL官方文檔。

MySQL Workbench

  1. 打開MySQL Workbench,選擇Database > Manage Connections

  2. 填寫RDS連接地址和賬號密碼。

  3. SSL頁簽下,設置Use SSL參數,指定SSL CA File為下載的PEM格式CA證書,然后單擊Test Connection或者OK

    說明

    關于Use SSL參數的選項,可以參考命令行連接方式的--ssl-mode說明。

DMS

在DMS中錄入RDS MySQL實例時,可設置開啟SSL參數。具體操作,請參見云數據庫錄入

也可以在已錄入的實例上右鍵,選擇編輯實例,然后在高級信息中設置。

應用程序代碼

Java

Connector/J(mysql-connector-java)是MySQL官方提供的JDBC驅動程序。本示例使用mysql-connector-java 8.0.19版本作為依賴。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>
說明

以下示例代碼使用sslMode屬性指定SSL模式。mysql-connector-java從8.0.13版本開始支持該屬性,如果您使用更早的版本,則需要改為使用useSSL、requireSSL和verifyServerCertificate屬性,具體請參見MySQL文檔

示例代碼:

package com.aliyun.sample;

import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {

        Connection conn = null;
        MysqlDataSource mysqlDS=null;

        try{
            mysqlDS = new MysqlDataSource();
            //可按需設置SslMode。關于該屬性的選項,請參見命令行連接方式的說明。
            mysqlDS.setSslMode("VERIFY_IDENTITY");
          
            //truststore用于存儲CA證書,這里設置truststore類型為JKS。
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            // 請將file:/后面的路徑改為您的ApsaraDB-CA-Chain.jks文件的路徑。
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            // 下載的JKS文件的密碼為apsaradb,不能修改。
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
          
            // 您的數據庫連接串
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
            // 您的數據庫端口
            mysqlDS.setPort(3306);
            // 您的數據庫賬號
            mysqlDS.setUser("xxxxxx");
            // 您的數據庫密碼
            mysqlDS.setPassword("xxxxxx");
            // 您的數據庫名
            mysqlDS.setDatabaseName("xxxxxx");

            conn = mysqlDS.getConnection();

        }catch(Exception e){
            e.printStackTrace();
        } finally {
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

Python

# 安裝pymysql    pip install pymysql

import pymysql

try:
    ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"}   # ca為證書的路徑,mode為ssl-mode
    conn = pymysql.connect(host='******.mysql.rds.aliyuncs.com', user='*****', passwd='******', db='*****', ssl=ssl_config)
    cursor = conn.cursor()
    cursor.execute('select version()')
    data = cursor.fetchone()
    print('Database version:', data[0])
    cursor.close()
except pymysql.Error as e:
    print(e)

使用自定義證書連接MySQL

命令行

對于MySQL 5.7.11及以后版本的客戶端,在連接命令中添加--ssl-mode選項可以設置SSL加密。

說明

對于MariaDB客戶端以及MySQL 5.7.11之前的客戶端,請使用--ssl和--ssl-verify-server-cert等選項。具體請參見MariaDB和MySQL官方文檔。

  • --ssl-mode=DISABLED表示連接不加密。

  • --ssl-mode=PREFERRED或者不添加--ssl-mode選項,表示嘗試加密連接,如果無法加密則采用非加密連接。

  • --ssl-mode=REQUIRED,表示必須加密連接,如果無法加密則連接失敗。

  • --ssl-mode=VERIFY_CA,表示必須加密連接,并用本地的CA證書驗證服務器證書是否有效。

  • --ssl-mode=VERIFY_IDENTITY,表示必須加密連接,并用本地的CA證書驗證服務器證書是否有效,并驗證服務器證書的主機名或IP地址是否與實際連接的主機名或IP地址匹配。

示例:

  1. 嘗試加密連接,如果無法加密則采用非加密連接。

    mysql -h {RDS連接地址} -u {RDS賬號} -p --ssl-mode=PREFERRED
  2. 要求加密連接,并驗證服務器證書的有效性。

    mysql -h {RDS連接地址} -u {RDS賬號} -p --ssl-mode=VERIFY_CA --ssl-ca={自定義CA證書路徑}
說明
  • 上述示例里的{RDS連接地址}{RDS賬號}{CA證書路徑}{自定義CA證書路徑}需替換為實際的值。

  • 更多關于--ssl-mode選項的說明,請參見MySQL官方文檔

MySQL Workbench

  1. 打開MySQL Workbench,選擇Database > Manage Connections

  2. 填寫RDS連接地址和賬號密碼。

  3. SSL頁簽下,設置Use SSL參數,如果為云端證書則指定SSL CA File為下載的PEM格式CA證書,如果配置的為自定義證書則指定SSL CA File為自定義的CA證書,然后單擊Test Connection或者OK

說明

關于Use SSL參數的選項,可以參考命令行連接方式的--ssl-mode說明。

DMS

在DMS中錄入RDS MySQL實例時,可設置開啟SSL參數。具體操作,請參見云數據庫錄入

也可以在已錄入的實例上右鍵,選擇編輯實例,然后在高級信息中設置。

應用程序代碼

Java

Connector/J(mysql-connector-java)是MySQL官方提供的JDBC驅動程序。本示例使用mysql-connector-java 8.0.19版本作為依賴。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>
重要

配置為自定義證書,需要手動生成JKS文件,具體步驟如下:

  1. 將你的客戶端證書和私鑰轉換成PKCS#12格式,因為keytool不直接支持從PEM格式導入私鑰和證書。使用OpenSSL做這個轉換:

    openssl pkcs12 -export -in {自定義CA證書} -inkey {自定義CA證書私鑰} -out keystore.p12 -name ganyang -CAfile {自定義CA證書}
    # 需要輸入密碼,連接時需要使用
    Enter Encryption Password:
    Verifying - Enter Encryption Password:
  2. 使用keytool導入剛才創建的PKCS#12文件到新的JKS文件):

    keytool -importkeystore -deststorepass JKS-password -destkeypass key-password -destkeystore keystore.jks -deststoretype pkcs12 -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass P12-password -alias your-alias

    關鍵詞解釋:

    -deststorepass 為JKS文件設置的密碼。
    -destkeypass 為JKS文件里的密鑰設置的密碼。
    -destkeystore 想要創建或已有的JKS文件。
    -deststoretype 想要創建文件的類型是PKCS#12。
    -srckeystore 之前生成的PKCS#12文件。
    -srcstoretype 表明源文件的類型是PKCS#12。
    -srcstorepass 保護PKCS#12文件的密碼。
    -alias 用戶給的客戶端證書和私鑰設置的別名。
  3. 獲取創建的JKS文:在keytool成功導入后可在執行目錄下找到keystore.jks。

說明

以下示例代碼使用sslMode屬性指定SSL模式。mysql-connector-java從8.0.13版本開始支持該屬性,如果您使用更早的版本,則需要改為使用useSSL、requireSSL和verifyServerCertificate屬性,具體請參見MySQL文檔

package com.aliyun.sample;

import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {

        Connection conn = null;
        MysqlDataSource mysqlDS=null;

        try{
            mysqlDS = new MysqlDataSource();
            //可按需設置SslMode。關于該屬性的選項,請參見命令行連接方式的說明。
            mysqlDS.setSslMode("VERIFY_IDENTITY");

            //以下為云端證書的JKS實現方式,如果MySQL配置為自定義證書,替換為通過自定義證書生成的JKS文件路徑和對應密碼即可
            //truststore用于存儲CA證書,這里設置truststore類型為JKS。
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            // 請將file:/后面的路徑改為您的ApsaraDB-CA-Chain.jks文件的路徑
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            // 下載的JKS文件的密碼為apsaradb,不能修改。
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
          
            // 您的數據庫連接串
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
            // 您的數據庫端口
            mysqlDS.setPort(3306);
            // 您的數據庫賬號
            mysqlDS.setUser("xxxxxx");
            // 您的數據庫密碼
            mysqlDS.setPassword("xxxxxx");
            // 您的數據庫名
            mysqlDS.setDatabaseName("xxxxxx");

            conn = mysqlDS.getConnection();

        }catch(Exception e){
            e.printStackTrace();
        } finally {
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
Python
# 安裝pymysql    pip install pymysql

import pymysql

try:
    ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"}   # ca為證書的路徑,mode為ssl-mode
    conn = pymysql.connect(host='******.mysql.rds.aliyuncs.com', user='*****', passwd='******', db='*****', ssl=ssl_config)
    cursor = conn.cursor()
    cursor.execute('select version()')
    data = cursor.fetchone()
    print('Database version:', data[0])
    cursor.close()
except pymysql.Error as e:
    print(e)