web-dev-qa-db-ja.com

MySQLでSSLを有効にする

Ubuntu Server 12.04を実行していますが、MySQLへのSSL接続を有効にします。

OpenSSLで次のキー/証明書ファイルを生成しました。

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

これらを/etc/mysqlに保存し、次の行を/etc/mysql/my.cnfに追加しました。

ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

次に、Sudo service restart mysqlでサーバーを再起動しました。

ただし、これはSSLを有効にしないようです。 mysqlセッション内:

mysql> show variables like '%ssl%';
+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| have_openssl  | DISABLED                   |
| have_ssl      | DISABLED                   |
| ssl_ca        | /etc/mysql/ca-cert.pem     |
| ssl_capath    |                            |
| ssl_cert      | /etc/mysql/server-cert.pem |
| ssl_cipher    |                            |
| ssl_key       | /etc/mysql/server-key.pem  |
+---------------+----------------------------+

私が欠けているアイデアはありますか?ありがとう

24
visitor93746

Ubuntu 12.04にはOpenSSL 1.0.1が付属しており、古いOpenSSL 0.9.8バージョンとは多少異なるデフォルトがあります。

とりわけ、openssl req -newkey rsa:2048を使用してRSAキーを生成すると、 PKCS#8 と呼ばれる形式のキーになります。 PEM形式で表されるこれらのキーには、より一般的な-----BEGIN PRIVATE KEY-----ヘッダーがあり、どの種類(RSA、DSA、EC)キーであるかはわかりません。

以前、OpenSSL 0.9.8では、キーは常に PKCS#1 と呼ばれる形式であり、PEMとして表され、ヘッダーは-----BEGIN RSA PRIVATE KEY-----でした。

このため、ヘッダーとフッターを以下から単純に変更することはできません。

-----BEGIN PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----`

同じものではなく、機能しません。代わりに、openssl rsaを使用してキーを古い形式に変換する必要があります。このような:

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

Ubuntu 12.04上のMySQL(v5.5.35)は、yaSSL(v2.2.2)と呼ばれるSSL実装を使用しています。キーはPKCS#1形式である必要があり、OpenSSL 1.0以降で使用されるPKCS#8形式をサポートしていません。このスレッドの他の投稿で示唆されているように、ヘッダーとフッターを単に変更する場合、MySQL/yaSSLは文句を言いませんが、接続できず、代わりに次のようなエラーが発生します。

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04OpenSSL 1.0.1fと新しい設定が付属しています。特に、以前のバージョンで使用されていたSHA1ではなく、SHA256ダイジェストを使用して証明書を生成します。偶然にも、MySQLにバンドルされているyaSSLバージョンもこれをサポートしていません。

MySQLで使用する証明書を生成する場合、RSAキーが従来のPKCS#1 PEM形式に変換され、その証明書がSHA1ダイジェストを使用していることを忘れないでください。

独自のCA、サーバー証明書、およびクライアント証明書を生成する方法の例を次に示します。

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem
33
user262116

これは私を助けました:

ファイルserver-key.pemのヘッダーとフッターは次のようになりました。

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

ただし、次のようなものが必要です。

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

BEGIN RSA PRIVATE KEYに注意してください

ログを表示するには:

Sudo vim /var/log/mysql/error.log

お役に立てれば。

4
user194410

12.04でも同じトラブルが発生しましたが、実際には問題の原因は防具でした。

buntuフォーラムでの解決策 を見つけ、.pemファイルを/etc/mysqlに移動すると解決しました。

/etc/apparmor.d/usr.sbin.mysqldでapparmorの設定を変更することもできます。

3
user273610

Ubuntu 16.04では、mysql_ssl_rsa_setupを実行しましたが、質問のようにショー変数のファイルを見ることができましたが、have_sslhave_opensslは引き続きDISABLEDでした。

解決策はchown mysql.mysql /var/lib/mysql/*.pemでした。あるいは、mysqlユーザーとしてmysql_ssl_rsa_setupを実行すると、正しいパーミッションでファイルが作成されると思います。

1
Craig Wright

Mysqldプロセスを実行しているユーザーに、キーと証明書ファイルへの読み取りアクセス権があることを確認してください。アカウント「mysql」を使用してMySQLを起動すると、次のようになります。

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

そうしないと、エラーログに次の内容が記録される場合があります。

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate
1
Isabi

秘密鍵ファイルは次のようになります(PKCS#1形式):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

秘密鍵が代わりに始まる場合:

-----BEGIN PRIVATE KEY-----

(PKCS#8形式)、変換このようにする必要があります:

openssl rsa -in server-key.pem -out server-key.pem

しない形式が異なるため、「missing」「RSA」タグを手動で手動で追加します。

0
rustyx