Rumah > Artikel > pangkalan data > Cara menggunakan MySQL untuk komunikasi yang disulitkan dalam bahasa Go
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:
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.
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
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
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()
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()
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!