ホームページ > データベース > mysql チュートリアル > MySQLを使ってGo言語で暗号化通信を行う方法

MySQLを使ってGo言語で暗号化通信を行う方法

WBOY
リリース: 2023-06-18 08:31:06
オリジナル
972 人が閲覧しました

情報セキュリティ問題がますます顕在化する中、現代のコンピュータ分野では暗号化通信が基礎技術となっています。 Web 開発に Go 言語を使用する場合、MySQL データベースが一般的に使用されるデータ ストレージ ソリューションです。機密データのセキュリティを確保するには、暗号化通信を使用してデータ送信中の機密性と完全性を保護する必要があります。この記事ではMySQLを使ってGo言語で暗号化通信を行う方法を紹介します。

SSL/TLS プロトコルを使用した MySQL 接続の暗号化

MySQL は、SSL/TLS プロトコルを使用した接続の暗号化をサポートしています。 SSL/TLS プロトコルは、送信中のデータの保護を保証するためにインターネットで広く使用されている安全な送信プロトコルです。 SSL/TLS を使用して MySQL 接続を暗号化するには、まず MySQL サーバーの SSL/TLS 機能を有効にしてから、クライアントの接続時に SSL/TLS プロトコルの使用を指定する必要があります。

MySQL サーバーで SSL/TLS を有効にする方法は次のとおりです。

  1. サーバー証明書と秘密キーを生成します

次のコマンドを使用して、サーバー SSL 証明書と秘密キーを生成します:

openssl req -x509 -days 3650 -newkey rsa:2048 -nodes -keyout server-key.pem -out server-cert.pem
ログイン後にコピー

このコマンドは、server-key.pem という名前の秘密キー ファイルと、現在のディレクトリに server-cert という名前のファイルを生成します。 . pem の証明書ファイル。

  1. 証明書と秘密キーを MySQL サーバー上の指定されたディレクトリにコピーします。

MySQL サーバー上の my.cnf 構成ファイルを変更し、サービスを指定します。 クライアント証明書と秘密キー ファイルへのパスは次のとおりです。

[mysqld]
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
ログイン後にコピー
  1. MySQL サーバーを再起動します

MySQL サーバーを再起動して、構成された SSL/ TLS 証明書と秘密キーが有効になります。

クライアントが MySQL サーバーに接続するときは、SSL/TLS プロトコルを指定する必要があります。 mysql コマンド ライン クライアントを使用する場合、次のコマンドを使用して接続できます。

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
ログイン後にコピー

このうち、--ssl-mode パラメータは、 SSL/TLS 接続、REQUIRED は、接続に SSL/TLS プロトコルを使用する必要があることを示します。 --ssl-ca パラメータは MySQL サーバーの証明書を指定し、--ssl-cert および --ssl-key パラメータはクライアントの証明書を指定します。秘密鍵。 -h パラメータは、MySQL サーバーのホスト名を指定します。

SSL/TLS プロトコルを使用して Go 言語で MySQL サーバーに接続するには、公式に提供されている MySQL ドライバー github.com/go-sql-driver/mysql を使用できます。 MySQL サーバーに接続する場合、SSL/TLS プロトコル接続を指定する必要があります。コードは次のとおりです:

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")
ログイン後にコピー

このうち、tls=true パラメータは SSL/TLS を有効にすることを示します。暗号化、tls -ca パラメータは MySQL サーバーの証明書を指定し、tls-cert および tls-key パラメータはクライアントの証明書と秘密キーを指定します。 。

暗号化されたパスワードを使用して MySQL に接続する

Go 言語では、github.com/go-sql-driver/mysql driverNewCipher() を使用できます。 関数はパスワードを暗号化します。 MySQL サーバーに接続するときは、暗号化されたパスワードを使用して接続します。

以下は、暗号化されたパスワードを使用して MySQL に接続するコード例です:

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()
    }
}
ログイン後にコピー

コードでは、まず NewConfig() 関数を使用して MySQL サーバーを作成します。構成オブジェクトを作成し、ユーザー名、パスワード、ホスト名、ポート番号、データベース名を設定します。次に、NewCipher() 関数を使用して、AES 暗号化キーと暗号を作成します。元のパスワードを暗号化した後、暗号化されたパスワードを使用して MySQL サーバーに接続します。

暗号化されたパスワードを使用して MySQL サーバーに接続すると、ネットワーク送信中に平文のパスワードが盗聴されることを回避でき、ハッカーが辞書攻撃やその他の方法でパスワードを解読することを防ぐことができます。

概要

この記事では、MySQL を使用して Go 言語で暗号化通信を行う方法を紹介します。データの機密性と整合性は、SSL/TLS プロトコルを使用して MySQL 接続を暗号化し、暗号化されたパスワードを使用して MySQL サーバーに接続することで確保できます。実際のアプリケーションでは、機密データのセキュリティを確保するために、実際の状況に基づいて適切な暗号化方式を選択する必要があります。

以上がMySQLを使ってGo言語で暗号化通信を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート