Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go

Cara menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go

WBOY
WBOYasal
2023-06-18 08:31:06953semak imbas

Apabila isu keselamatan maklumat menjadi semakin ketara, komunikasi yang disulitkan telah menjadi teknologi asas dalam bidang komputer moden. Apabila menggunakan bahasa Go untuk pembangunan web, pangkalan data MySQL ialah penyelesaian penyimpanan data yang biasa digunakan. Untuk memastikan keselamatan data sensitif, kami perlu menggunakan komunikasi yang disulitkan untuk melindungi kerahsiaan dan integriti semasa penghantaran data. Artikel ini akan memperkenalkan cara menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go.

Sulitkan sambungan MySQL menggunakan protokol SSL/TLS

MySQL menyokong penyulitan sambungan menggunakan protokol SSL/TLS. Protokol SSL/TLS ialah protokol penghantaran selamat yang digunakan secara meluas di Internet untuk memastikan data dilindungi semasa penghantaran. Untuk menggunakan SSL/TLS untuk menyulitkan sambungan MySQL, anda perlu mendayakan fungsi SSL/TLS pelayan MySQL dahulu, dan kemudian nyatakan penggunaan protokol SSL/TLS apabila pelanggan menyambung.

Berikut ialah cara untuk mendayakan SSL/TLS pada pelayan MySQL:

  1. Jana sijil pelayan dan kunci peribadi

Gunakan arahan berikut untuk jana sijil SSL pelayan dan kunci peribadi:

openssl req -x509 -days 3650 -newkey rsa:2048 -nodes -keyout server-key.pem -out server-cert.pem

Perintah ini akan menjana fail kunci peribadi bernama server-key.pem dan fail sijil bernama server-cert.pem dalam direktori semasa.

  1. Salin sijil dan kunci peribadi ke direktori yang ditentukan pada pelayan MySQL

Ubah suai fail konfigurasi my.cnf pada pelayan MySQL dan nyatakan sijil pelayan dan peribadi fail utama Laluan adalah seperti berikut:

[mysqld]
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
  1. Mulakan semula pelayan MySQL

Mulakan semula pelayan MySQL untuk menjadikan sijil SSL/TLS yang dikonfigurasikan dan kunci persendirian berkuat kuasa.

Apabila pelanggan menyambung ke pelayan MySQL, ia perlu menentukan protokol SSL/TLS. Apabila menggunakan klien baris arahan mysql, anda boleh menggunakan arahan berikut untuk menyambung:

mysql --ssl-mode=REQUIRED --ssl-ca=/path/to/server-cert.pem 
--ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem 
-h your-mysql-hostname -u username -p

Antaranya, parameter --ssl-mode menentukan jenis sambungan SSL/TLS dan REQUIRED menunjukkan bahawa Protokol SSL/TLS mesti digunakan untuk menyambung. Parameter --ssl-ca menentukan sijil pelayan MySQL, dan parameter --ssl-cert dan --ssl-key menentukan sijil pelanggan dan kunci peribadi. Parameter -h menentukan nama hos pelayan MySQL.

Untuk menggunakan protokol SSL/TLS untuk menyambung ke pelayan MySQL dalam bahasa Go, anda boleh menggunakan pemacu MySQL rasmi github.com/go-sql-driver/mysql. Apabila menyambung ke pelayan MySQL, anda perlu menentukan sambungan protokol SSL/TLS Kodnya adalah seperti berikut:

db, err := sql.Open("mysql", "user:password@tcp(hostname:port)/dbname?tls=true&tls-ca=path/to/server-cert.pem&tls-cert=path/to/client-cert.pem&tls-key=path/to/client-key.pem")

Antaranya, parameter tls=true menunjukkan pendayaan penyulitan SSL/TLS dan Parameter menentukan sijil pelayan MySQL Parameter tls-ca dan tls-cert menentukan sijil pelanggan dan kunci peribadi. tls-key

Gunakan kata laluan yang disulitkan untuk menyambung ke MySQL

Dalam bahasa Go, anda boleh menggunakan fungsi

pemacu github.com/go-sql-driver/mysql untuk menyulitkan kata laluan. Apabila menyambung ke pelayan MySQL, kata laluan yang disulitkan akan digunakan untuk menyambung. NewCipher()

Berikut ialah contoh kod untuk menyambung ke MySQL menggunakan kata laluan yang disulitkan:

import (
    "crypto/aes"
    "crypto/cipher"
    "database/sql"
    "fmt"
    mysql "github.com/go-sql-driver/mysql"
    "strconv"
)

func main() {
    // MySQL服务器配置
    cfg := mysql.NewConfig()
    cfg.User = "root"
    cfg.Passwd = "password" // 原始密码
    cfg.Addr = "hostname:port"
    cfg.DBName = "dbname"
    // 加密密码
    key := []byte("0123456789abcdef") // 密钥
    plaintext := []byte(cfg.Passwd) // 原始密码
    block, _ := aes.NewCipher(key)
    ciphertext := make([]byte, aes.BlockSize+len(plaintext))
    iv := ciphertext[:aes.BlockSize]
    for i := range iv {
        iv[i] = byte(i)
    }
    cfb := cipher.NewCFBEncrypter(block, iv)
    cfb.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
    cfg.Passwd = fmt.Sprintf("%x", ciphertext) // 加密后的密码
    // 连接MySQL服务器
    db, err := sql.Open("mysql", cfg.FormatDSN())
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()
    // 执行SQL语句
    rows, err := db.Query("SELECT * FROM tablename")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer rows.Close()
    // 输出结果
    cols, _ := rows.Columns()
    data := make([][]byte, len(cols))
    pointers := make([]interface{}, len(cols))
    for i := range data {
        pointers[i] = &data[i]
    }
    for rows.Next() {
        rows.Scan(pointers...)
        for i := range data {
            fmt.Print(string(data[i]), "    ")
        }
        fmt.Println()
    }
}

Dalam kod, mula-mula gunakan fungsi

untuk mencipta objek konfigurasi pelayan MySQL dan tetapkan pengguna nama, kata laluan, nama hos, nombor Port dan nama pangkalan data. Kemudian gunakan fungsi NewConfig() untuk mencipta kunci dan penyulitan AES yang disulitkan. Selepas menyulitkan kata laluan asal, gunakan kata laluan yang disulitkan untuk menyambung ke pelayan MySQL. NewCipher()

Menggunakan kata laluan yang disulitkan untuk menyambung ke pelayan MySQL boleh mengelak daripada mencuri dengar kata laluan teks biasa semasa penghantaran rangkaian, dan menghalang penggodam daripada menggunakan serangan kamus dan kaedah lain untuk memecahkan kata laluan.

Ringkasan

Artikel ini memperkenalkan kaedah menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go. Kerahsiaan dan integriti data boleh dipastikan dengan menyulitkan sambungan MySQL menggunakan protokol SSL/TLS dan menggunakan kata laluan yang disulitkan untuk menyambung ke pelayan MySQL. Dalam aplikasi praktikal, kaedah penyulitan yang sesuai harus dipilih berdasarkan keadaan sebenar untuk memastikan keselamatan data sensitif.

Atas ialah kandungan terperinci Cara menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn